模块 wjybxx.base

接口 DelayedCompressList<E>

所有已知实现类:
DelayedCompressListImpl

public interface DelayedCompressList<E>
迭代期间延迟压缩空间的List,在迭代期间删除元素只会清理元素,不会减少size,而插入元素会添加到List末尾并增加size 1.不支持插入Null -- 理论上做的到,但会导致较高的复杂度,也很少有需要。 2.未实现Iterable接口,因为不能按照正常方式迭代

使用方式


     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
  • 字段概要

    字段
    修饰符和类型
    字段
    说明
    static final int
     
  • 方法概要

    修饰符和类型
    方法
    说明
    boolean
    add(E e)
     
    default boolean
    addAll(Collection<? extends E> c)
    批量添加元素
    void
    开始迭代
    void
     
    default int
    collectTo(Collection<? super E> out)
    将List中的元素写入目标集合
    default boolean
    基于equals查询一个元素是否在List中
    default boolean
    基于引用相等查询一个元素是否在List中
    void
    迭代结束 -- 必须在finally块中调用,否则可能使List处于无效状态
    default void
    forEach(Consumer<? super E> action)
    迭代List内的元素,该快捷方式不会迭代迭代期间新增的元素 如果需要元素的下标,请使用forEach(ObjIntConsumer)
    default void
    forEach(ObjIntConsumer<? super E> action)
    迭代List内的元素,该快捷方式不会迭代迭代期间新增的元素
    get(int index)
    获取指定位置的元素
    int
    基于equals查找元素在List中的位置
    default int
    indexCustom(Predicate<? super E> predicate)
    自定义index查询;自定义查询时不支持查找null
    int
    基于引用相等查找元素在List中的位置
    boolean
    是否处于延迟压缩状态;是否在迭代期间删除了元素
    default boolean
     
    boolean
    当前是否正在迭代
    boolean
    查询List是否真的为空 如果当前正在迭代,则可能产生遍历统计的情况,要注意开销问题。
    int
    基于equals逆向查找元素在List中的位置
    default int
    lastIndexCustom(Predicate<? super E> predicate)
     
    int
    基于引用相等逆向查找元素在List中的位置
    int
    获取list的真实大小 如果当前正在迭代,则可能产生遍历统计的情况,要注意开销问题。
    default boolean
    根据equals相等删除元素
    removeAt(int index)
    删除给定位置的元素
    default boolean
    根据引用相等删除元素
    set(int index, E e)
    将给定元素赋值到给定位置
    int
    获取list的当前大小 注意:迭代期间删除的元素并不会导致size变化,因此该值是一个不准确的值。
    void
    sort(Comparator<? super E> comparator)
     
  • 字段详细资料

    • INDEX_NOT_FOUND

      static final int INDEX_NOT_FOUND
      另请参阅:
  • 方法详细资料

    • beginItr

      void beginItr()
      开始迭代
    • endItr

      void endItr()
      迭代结束 -- 必须在finally块中调用,否则可能使List处于无效状态
    • isIterating

      boolean isIterating()
      当前是否正在迭代
    • isDelayed

      boolean isDelayed()
      是否处于延迟压缩状态;是否在迭代期间删除了元素
    • add

      boolean add(E e)
      返回:
      如果添加元素成功则返回true
      抛出:
      NullPointerException - 如果e为null
    • get

      @Nullable E get(int index)
      获取指定位置的元素
      返回:
      如果指定位置的元素已删除,则返回null
    • set

      E set(int index, E e)
      将给定元素赋值到给定位置
      返回:
      该位置的前一个值
      抛出:
      NullPointerException - 如果e为null
    • remove

      default boolean remove(Object e)
      根据equals相等删除元素
      返回:
      如果元素在集合中则删除并返回true
    • removeRef

      default boolean removeRef(Object e)
      根据引用相等删除元素
      返回:
      如果元素在集合中则删除并返回true
    • removeAt

      E removeAt(int index)
      删除给定位置的元素
      返回:
      如果指定位置存在元素,则返回对应的元素,否则返回Null
    • clear

      void clear()
    • index

      int index(@Nullable Object e)
      基于equals查找元素在List中的位置
      参数:
      e - 如果null,表示查询第一个删除的的元素位置
      返回:
      如果元素不在集合中,则返回-1
    • lastIndex

      int lastIndex(@Nullable Object e)
      基于equals逆向查找元素在List中的位置
      参数:
      e - 如果null,表示查询最后一个删除的的元素位置
      返回:
      如果元素不在集合中,则返回-1
    • indexOfRef

      int indexOfRef(@Nullable Object e)
      基于引用相等查找元素在List中的位置
      参数:
      e - 如果null,表示查询第一个删除的的元素位置
      返回:
      如果元素不在集合中,则返回-1
    • lastIndexOfRef

      int lastIndexOfRef(@Nullable Object e)
      基于引用相等逆向查找元素在List中的位置
      参数:
      e - 如果null,表示查询最后一个删除的的元素位置
      返回:
      如果元素不在集合中,则返回-1
    • contains

      default boolean contains(Object e)
      基于equals查询一个元素是否在List中
    • containsRef

      default boolean containsRef(Object e)
      基于引用相等查询一个元素是否在List中
    • size

      int size()
      获取list的当前大小 注意:迭代期间删除的元素并不会导致size变化,因此该值是一个不准确的值。
    • isEmpty

      default boolean isEmpty()
    • realSize

      int realSize()
      获取list的真实大小 如果当前正在迭代,则可能产生遍历统计的情况,要注意开销问题。
    • isRealEmpty

      boolean isRealEmpty()
      查询List是否真的为空 如果当前正在迭代,则可能产生遍历统计的情况,要注意开销问题。
    • sort

      void sort(@Nonnull Comparator<? super E> comparator)
      抛出:
      IllegalStateException - 如果当前正在迭代
    • addAll

      default boolean addAll(@Nonnull Collection<? extends E> c)
      批量添加元素
    • indexCustom

      default int indexCustom(Predicate<? super E> predicate)
      自定义index查询;自定义查询时不支持查找null
      参数:
      predicate - 查询过程不可以修改当前List的状态
    • lastIndexCustom

      default int lastIndexCustom(Predicate<? super E> predicate)
    • forEach

      default void forEach(Consumer<? super E> action)
      迭代List内的元素,该快捷方式不会迭代迭代期间新增的元素 如果需要元素的下标,请使用forEach(ObjIntConsumer)
    • forEach

      default void forEach(ObjIntConsumer<? super E> action)
      迭代List内的元素,该快捷方式不会迭代迭代期间新增的元素
      参数:
      action - 参数1为对应元素,参数2为下标 -- 返回index以方便快速删除
    • collectTo

      default int collectTo(Collection<? super E> out)
      将List中的元素写入目标集合
      参数:
      out - 结果集
      返回:
      添加的元素个数