首页 > 代码库 > 集合类
集合类
图中的绿色的虚线代表实现,绿色实线代表接口之间的继承,蓝色实线代表类之间的继承。
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:
集合类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。