首页 > 代码库 > 集合类

集合类

技术分享

 图中的绿色的虚线代表实现,绿色实线代表接口之间的继承,蓝色实线代表类之间的继承。

1)AbstractCollection:提供了大量的Collectin实现

   两个抽象方法:

    public abstract Iterator<E> iterator();

    public abstract int size();

2)AbstractList:随机访问列表,内部提供了Iterator,ListIterator迭代器的实现,分别为Itr和ListItr(继承Itr),ListItr多了向前和set操作

private class Itr implements Iterator<E> {
  
     //类似于游标
int cursor = 0;      //上一次迭代到的元素的位置 int lastRet = -1;      // modCount是一个全局变量,表示该List对象修改的次数 int expectedModCount = modCount; public boolean hasNext() { return cursor != size(); } public E next() {
       //这个方法时检测modCount与expectedModCount是否相等,是否有并发修改操作 checkForComodification();
try { int i = cursor;
         //get(i)是abstract方法 E next
= get(i);
         //记录上次迭代的位置 lastRet
= i; cursor = i + 1; return next; } catch (IndexOutOfBoundsException e) { checkForComodification(); throw new NoSuchElementException(); } } public void remove() { if (lastRet < 0) throw new IllegalStateException(); checkForComodification(); try { AbstractList.this.remove(lastRet); if (lastRet < cursor) cursor--; lastRet = -1; expectedModCount = modCount; } catch (IndexOutOfBoundsException e) { throw new ConcurrentModificationException(); } } final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); } }

此外,还有两个类:SubList和RandomAccessSubList,这两个类的用处是什么呢?

在AbstractList中,有subList这样一个方法

public List<E> subList(int fromIndex, int toIndex) {
    return (this instanceof RandomAccess ?
             new RandomAccessSubList<>(this, fromIndex, toIndex) :
             new SubList<>(this, fromIndex, toIndex));
}

 RandomAccess:标识某个类是否支持随机访问,在这里是判断这个List是否是RandomAccess的实例

 RandomAccessSubList:只是加了RandomAccess标识,重点看SubList

1 class RandomAccessSubList<E> extends SubList<E> implements RandomAccess {
2     RandomAccessSubList(AbstractList<E> list, int fromIndex, int toIndex) {
3         super(list, fromIndex, toIndex);
4     }
5 
6     public List<E> subList(int fromIndex, int toIndex) {
7         return new RandomAccessSubList<>(this, fromIndex, toIndex);
8     }
9 }

 SubList:

 

集合类