今天把AbstractList看下,看看他内部究竟是怎样的,有源码就是好。
AbstractList
一个实现了List接口的抽象类,源码
public abstract class AbstractListextends AbstractCollection implements List
原来他不仅仅实现了List接口,还继承了AbstractCollection抽象类。看他实现了哪些方法。
add
public boolean add(E e) { add(size(), e); return true; }原来add(E e)方法调用了add(int index,E e)方法。源码不看也知道,这个可以在指定位置插入元素的方法是没有具体实现的。
public void add(int index, E element) { throw new UnsupportedOperationException(); }
remove
看下clear方法的实现
public void clear() { removeRange(0, size()); }他调用了removeRange方法,源码
protected void removeRange(int fromIndex, int toIndex) { ListIterator这个用到了迭代器,我觉得fromIndex肯定是应该比toIndex小的。去看下有关迭代器的方法it = listIterator(fromIndex); for (int i=0, n=toIndex-fromIndex; i
Iterator
public IteratorAbstractList提供了三个接口允许用户取得迭代器。iterator() { return new Itr(); } public ListIterator listIterator() { return listIterator(0); } public ListIterator listIterator(final int index) { rangeCheckForAdd(index); return new ListItr(index); }
其它方法
hashCode:
public int hashCode() { int hashCode = 1; for (E e : this) hashCode = 31*hashCode + (e==null ? 0 : e.hashCode()); return hashCode; }
subList:
public ListsubList(int fromIndex, int toIndex) { return (this instanceof RandomAccess ? new RandomAccessSubList<>(this, fromIndex, toIndex) : new SubList<>(this, fromIndex, toIndex)); }