bitset和lambda表达式
程序员文章站
2022-05-24 20:14:30
...
今天看了下lambda表达式,突然想看一下list中removeif的源码,发现挺有意思的
首先说一下BitSet这个类,这个类按照jdk里面说的是一个按需增长的位向量,没一个位置都是一个boolean值,我自己的理解就是一个很容易扩大的数组,每个数组的位置,都是一个boolean值,每个默认值为false
好,这会来看一下removif的源码,前提得先明白lambda表达式,removeif方法是传递了一个Predicate接口的参数
首先定义一个removeset的bitset,长度为当前数组的长度,然后遍历当前数组,利用传递的参数filter来判定是否需要执行remove操作,如果需要,则将当前的bitset位置为true,removeCount加1,
同样,首先遍历list,这个地方特意定义了两个下标,nextClearBit(i)以当前坐标为基数返回第一个设置为false的下标,包含当前坐标,也就是说找出第一个未设置需要删除的坐标,并且把他放入j位置
这种循环条件是将所有不需要移除的元素统统前移,然后利用newSize位置,将后面的元素全部删除掉
这种思想很有意思,利用了bitset类的一些思想,同样bitset也提供了一个nextSetBit方法,是返回第一个设置为true的下标