类 DelayedCompressList<E>

java.lang.Object
cn.wjybxx.base.collection.DelayedCompressList<E>

@NotThreadSafe public final class DelayedCompressList<E> extends Object
迭代期间延迟压缩空间的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
     
  • 构造器概要

    构造器
    构造器
    说明
     
    DelayedCompressList(int initCapacity)
     
     
  • 方法概要

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

    从类继承的方法 java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 字段详细资料

    • INDEX_NOT_FOUND

      public static final int INDEX_NOT_FOUND
      另请参阅:
  • 构造器详细资料

    • DelayedCompressList

      public DelayedCompressList()
    • DelayedCompressList

      public DelayedCompressList(int initCapacity)
    • DelayedCompressList

      public DelayedCompressList(Collection<? extends E> src)
  • 方法详细资料

    • beginItr

      public void beginItr()
      开始迭代
    • endItr

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

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

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

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

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

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

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

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

      public void clear()
    • contains

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

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

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

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

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

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

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

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

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

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

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

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

      public boolean isEmpty()
      判断list是否为空 注意:迭代期间删除的元素并不会导致size变化,因此该值是一个不准确的值。
    • realSize

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

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

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

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