public interface DynamicArray<E>
动态数组
(支持迭代期间删除元素和扩容)
约定
0.Set(index, null) 即表示删除元素 1.Add和Insert一定会增加length;但Remove和Set方法不一定会减少length。 2.在迭代期间删除元素,一定不会减少length;在迭代结束后,可能会压缩空间减少length -- 允许一定比例的null是该List的核心; 3.在迭代期间添加元素,元素会被添加到List末尾并增加length;在迭代结束后,可能会压缩空间减少length。 4.在非迭代期间,删除元素可能立即触发空间压缩。 5.需要使用传统数组方式进行迭代,因此未实现Iterable接口。
使用方式
list.beginItr();
try {
for(int i = 0, len = list.length();i 无效输入:'<' len; i++){
E e = list.get(i);
if (e == null) {
continue;
}
doSomething(e);
}
} finally {
list.endItr();
}
- 作者:
- wjybxx date - 2025/4/11
-
方法概要
修饰符和类型方法说明void添加元素 不论是否正在迭代,length一定会增加。voidbeginItr()开始迭代voidclear()清空List 注意: 1.在迭代期间调用Clear是高风险行为,会清理自身迭代范围外的数据,可能影响其它迭代逻辑。voidcompress(boolean ignoreFactor) 压缩数组空间boolean基于equals查询一个元素是否在List中boolean判断数组是否包含Null元素,用于更快的判断是否为空。booleancontainsRef(E e) 基于引用相等查询一个元素是否在List中int非空元素数量,实时值。voidendItr()迭代结束 -- 特殊情况下可以反复调用该接口修复状态。voidensureCapacity(int minCapacity) 确保空间足够(减少不必要的扩容)voidforEach(ObjIntConsumer<? super E> action) 迭代数组内的元素,该快捷方式不会迭代迭代期间新增的元素get(int index) 获取指定位置的元素int根据equals查询下标intindexOfRef(E e) 根据引用相等查询下标void插入元素 不论是否正在迭代,length一定会增加。boolean当前是否正在迭代intlastIndexOf(E e) 根据equals查询下标intlastIndexOfRef(E e) 根据引用相等查询下标intlength()数组的当前长度int空元素数量,实时值。boolean根据equals相等删除元素 注意:不论是否正在迭代,length都可能不会变化。boolean根据引用相等删除元素 注意:不论是否正在迭代,length都可能不会变化。将给定元素赋值到给定位置voidsort(Comparator<? super E> comparator) 对数组元素进行排序 (该接口会强制压缩空间,再进行排序)toList()将所有的非null元素转存到List
-
方法详细资料
-
isIterating
boolean isIterating()当前是否正在迭代 -
beginItr
void beginItr()开始迭代 -
endItr
void endItr()迭代结束 -- 特殊情况下可以反复调用该接口修复状态。 -
get
获取指定位置的元素- 返回:
- 如果指定位置的元素已删除,则返回null
-
set
将给定元素赋值到给定位置- 参数:
index- 元素下标e- 如果为null表示删除- 返回:
- 该位置的前一个值
-
add
添加元素 不论是否正在迭代,length一定会增加。- 抛出:
NullPointerException- 如果e为null
-
insert
插入元素 不论是否正在迭代,length一定会增加。- 参数:
index- 要插入的位置,小于lengthe- 要插入的元素- 抛出:
NullPointerException- 如果e为nullIllegalStateException- 如果当前正在迭代
-
remove
根据equals相等删除元素 注意:不论是否正在迭代,length都可能不会变化。- 参数:
e- null固定返回false- 返回:
- 如果元素在集合中则删除并返回true
-
removeRef
根据引用相等删除元素 注意:不论是否正在迭代,length都可能不会变化。- 参数:
e- null固定返回false- 返回:
- 如果元素在集合中则删除并返回true
-
clear
void clear()清空List 注意: 1.在迭代期间调用Clear是高风险行为,会清理自身迭代范围外的数据,可能影响其它迭代逻辑。 2.在迭代期间清理元素不会更新length -
contains
基于equals查询一个元素是否在List中- 参数:
e- 要查询的元素- 返回:
- 如果存在则返回true
-
containsRef
基于引用相等查询一个元素是否在List中- 参数:
e- 要查询的元素- 返回:
- 如果存在则返回true
-
indexOf
根据equals查询下标- 参数:
e- 要查询的元素- 返回:
- 如果存在则返回对应的下标,否则返回-1
-
lastIndexOf
根据equals查询下标- 参数:
e- 要查询的元素- 返回:
- 如果存在则返回对应的下标,否则返回-1
-
indexOfRef
根据引用相等查询下标- 参数:
e- 要查询的元素- 返回:
- 如果存在则返回对应的下标,否则返回-1
-
lastIndexOfRef
根据引用相等查询下标- 参数:
e- 要查询的元素- 返回:
- 如果存在则返回对应的下标,否则返回-1
-
length
int length()数组的当前长度 -
elementCount
int elementCount()非空元素数量,实时值。 注意:该方法可能有额外的开销 -
nullCount
int nullCount()空元素数量,实时值。 注意:该方法可能有额外的开销 -
containsNull
boolean containsNull()判断数组是否包含Null元素,用于更快的判断是否为空。 注意:该方法可能有额外的开销。 -
sort
对数组元素进行排序 (该接口会强制压缩空间,再进行排序)- 抛出:
IllegalStateException- 如果当前正在迭代
-
ensureCapacity
void ensureCapacity(int minCapacity) 确保空间足够(减少不必要的扩容)- 参数:
minCapacity- 期望的最小空间
-
compress
void compress(boolean ignoreFactor) 压缩数组空间- 参数:
ignoreFactor- 是否忽略null比重- 抛出:
IllegalStateException- 如果当前正在迭代
-
forEach
迭代数组内的元素,该快捷方式不会迭代迭代期间新增的元素- 参数:
action- action接收元素和对应的下标
-
toList
将所有的非null元素转存到List
-