欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

bitset和lambda表达式

程序员文章站 2022-05-24 20:09:54
...

今天看了下lambda表达式,突然想看一下list中removeif的源码,发现挺有意思的

首先说一下BitSet这个类,这个类按照jdk里面说的是一个按需增长的位向量,没一个位置都是一个boolean值,我自己的理解就是一个很容易扩大的数组,每个数组的位置,都是一个boolean值,每个默认值为false

 

好,这会来看一下removif的源码,前提得先明白lambda表达式,removeif方法是传递了一个Predicate接口的参数

bitset和lambda表达式
            
    
    博客分类: java  
 首先定义一个removeset的bitset,长度为当前数组的长度,然后遍历当前数组,利用传递的参数filter来判定是否需要执行remove操作,如果需要,则将当前的bitset位置为true,removeCount加1,

bitset和lambda表达式
            
    
    博客分类: java  
同样,首先遍历list,这个地方特意定义了两个下标,nextClearBit(i)以当前坐标为基数返回第一个设置为false的下标,包含当前坐标,也就是说找出第一个未设置需要删除的坐标,并且把他放入j位置

这种循环条件是将所有不需要移除的元素统统前移,然后利用newSize位置,将后面的元素全部删除掉

这种思想很有意思,利用了bitset类的一些思想,同样bitset也提供了一个nextSetBit方法,是返回第一个设置为true的下标

 

 

  • bitset和lambda表达式
            
    
    博客分类: java  
  • 大小: 58.5 KB
  • bitset和lambda表达式
            
    
    博客分类: java  
  • 大小: 50.5 KB