java.lang.Object
cn.wjybxx.base.collection.DelayedCompressList<E>
迭代期间延迟压缩空间的List,在迭代期间删除元素只会清理元素,不会减少size,而插入元素会添加到List末尾并增加size
1.不支持插入Null -- 理论上做的到,但会导致较高的复杂度,也很少有需要。
2.未实现
Iterable接口,因为不能按照正常方式迭代 -- 理论上迭代器实现AutoCloseable接口即可,但较危险。
使用方式
list.beginItr();
try {
for(int i = 0, size = list.size();i 无效输入:'<' size; i++){
E e = list.get(i);
if (e == null) {
continue;
}
doSomething(e);
}
} finally {
list.endItr();
}
PS:
1.该List主要用于事件监听器列表和对象列表等场景。
2.使用forEach(Consumer)可能有更好的迭代速度。- 作者:
- wjybxx date 2023/4/6
-
构造器概要
构造器构造器说明DelayedCompressList(int initCapacity) DelayedCompressList(int initCapacity, float loadFactor) DelayedCompressList(int initCapacity, float loadFactor, IndexedElementHelper<? super E> helper) -
方法概要
修饰符和类型方法说明booleanbooleanaddAll(Collection<? extends E> c) 批量添加元素voidbeginItr()开始迭代voidclear()清空Listvoidcompress(boolean force) 主动压缩空间boolean基于equals查询一个元素是否在List中boolean基于引用相等查询一个元素是否在List中float获取当前负载 -- 主要用于debugint非空元素数量voidendItr()迭代结束 -- 必须在finally块中调用,否则可能使List处于无效状态;特殊情况下可以反复调用该接口修复状态。void迭代List内的元素,该快捷方式不会迭代迭代期间新增的元素 如果需要元素的下标,请使用forEach(ObjIntConsumer)voidforEach(ObjIntConsumer<? super E> action) 迭代List内的元素,该快捷方式不会迭代迭代期间新增的元素get(int index) 获取指定位置的元素int基于equals查找元素在List中的位置intindexCustom(Predicate<? super E> predicate) 自定义index查询; 1.需要处理null 2.查询过程不可以修改当前List的状态intindexOfRef(Object e) 基于引用相等查找元素在List中的位置void插入元素(迭代期间禁止插入,不论index是否特殊)booleanisEmpty()判断list是否为空 注意:迭代期间删除的元素并不会导致size变小,因此该值是一个不准确的值。boolean当前是否正在迭代int基于equals逆向查找元素在List中的位置intlastIndexCustom(Predicate<? super E> predicate) 自定义lastIndex查询; 1.需要处理null 2.查询过程不可以修改当前List的状态int基于引用相等逆向查找元素在List中的位置int空元素数量boolean根据equals相等删除元素removeAt(int index) 删除给定位置的元素boolean根据引用相等删除元素将给定元素赋值到给定位置intsize()获取list的当前大小 注意:迭代期间删除的元素并不会导致size变小,因此该值是一个不准确的值。voidsort(Comparator<? super E> comparator) toList()转换为普通的List
-
构造器详细资料
-
DelayedCompressList
public DelayedCompressList() -
DelayedCompressList
public DelayedCompressList(int initCapacity) -
DelayedCompressList
public DelayedCompressList(int initCapacity, float loadFactor) -
DelayedCompressList
public DelayedCompressList(int initCapacity, float loadFactor, IndexedElementHelper<? super E> helper)
-
-
方法详细资料
-
beginItr
public void beginItr()开始迭代 -
endItr
public void endItr()迭代结束 -- 必须在finally块中调用,否则可能使List处于无效状态;特殊情况下可以反复调用该接口修复状态。 -
compress
public void compress(boolean force) 主动压缩空间 -
currentLoad
public float currentLoad()获取当前负载 -- 主要用于debug -
isIterating
public boolean isIterating()当前是否正在迭代 -
add
- 返回:
- 如果添加元素成功则返回true
- 抛出:
NullPointerException- 如果e为null
-
addAll
批量添加元素 -
insert
插入元素(迭代期间禁止插入,不论index是否特殊) -
get
获取指定位置的元素- 返回:
- 如果指定位置的元素已删除,则返回null
-
set
将给定元素赋值到给定位置- 参数:
e- 如果为null,则表示删除- 返回:
- 该位置的前一个值
- 抛出:
NullPointerException- 如果e为null
-
removeAt
删除给定位置的元素- 返回:
- 如果指定位置存在元素,则返回对应的元素,否则返回Null
-
remove
根据equals相等删除元素- 返回:
- 如果元素在集合中则删除并返回true
-
removeRef
根据引用相等删除元素- 返回:
- 如果元素在集合中则删除并返回true
-
clear
public void clear()清空List -
contains
基于equals查询一个元素是否在List中 -
containsRef
基于引用相等查询一个元素是否在List中 -
index
基于equals查找元素在List中的位置- 参数:
e- 如果null,表示查询第一个删除的的元素位置- 返回:
- 如果元素不在集合中,则返回-1
-
lastIndex
基于equals逆向查找元素在List中的位置- 参数:
e- 如果null,表示查询最后一个删除的的元素位置- 返回:
- 如果元素不在集合中,则返回-1
-
indexOfRef
基于引用相等查找元素在List中的位置- 参数:
e- 如果null,表示查询第一个删除的的元素位置- 返回:
- 如果元素不在集合中,则返回-1
-
lastIndexOfRef
基于引用相等逆向查找元素在List中的位置- 参数:
e- 如果null,表示查询最后一个删除的的元素位置- 返回:
- 如果元素不在集合中,则返回-1
-
indexCustom
自定义index查询; 1.需要处理null 2.查询过程不可以修改当前List的状态- 参数:
predicate- 测试条件
-
lastIndexCustom
自定义lastIndex查询; 1.需要处理null 2.查询过程不可以修改当前List的状态- 参数:
predicate- 测试条件
-
sort
- 抛出:
IllegalStateException- 如果当前正在迭代
-
size
public int size()获取list的当前大小 注意:迭代期间删除的元素并不会导致size变小,因此该值是一个不准确的值。 -
isEmpty
public boolean isEmpty()判断list是否为空 注意:迭代期间删除的元素并不会导致size变小,因此该值是一个不准确的值。 -
elementCount
public int elementCount()非空元素数量 -
nullCount
public int nullCount()空元素数量 -
forEach
迭代List内的元素,该快捷方式不会迭代迭代期间新增的元素 如果需要元素的下标,请使用forEach(ObjIntConsumer) -
forEach
迭代List内的元素,该快捷方式不会迭代迭代期间新增的元素- 参数:
action- 参数1为对应元素,参数2为下标 -- 返回index以方便快速删除
-
toList
转换为普通的List
-