AbstractList继承自AbstractCollection,并实现了List接口,实现了List接口中大部分函数,从而方便其他类实现List接口
iterator方法
需要注意的
- remove方法删除上次调用next或者previous返回的集合元素,在调用remove方法之前,如果没有调用一次next或者previous方法,或者在调用了next、previous方法之后已经调用过了remove方法或add方法,换句话说距离本次调用remove方法最近的方法不是next、previous则抛出IllegalStateException异常。这是因为在每一次调用next或者previous时会将lastRet设置为刚要返回的元素索引,而每一次执行remove方法都将lastRet设置为 -1 标识不能在删除元素。
- 在迭代期间集合发生改变,则抛出ConcurrentModificationException异常。
ListIterator方法
注意:
- set方法:替换上一次调用next或previous集合的返回值,在调用set方法之前,如果没有调用一次next或者previous方法,或者在调用了next、previous方法之后已经调用过了remove方法或add方法,换句话说距离本次调用set方法最近的方法不是next、previous则抛出IllegalStateException异常。
- add方法会将lastRet设置为-1,所以在add方法之后紧跟remove方法或者set方法都将抛出IllegalStateException异常。
这里看一下equals函数
可以看的出来
- 两个list对象引用相同,即都指向同一个堆对象,所以实际上是同一个物理对象,返回true
- 两个list对象 :(1)参数类型是List类型的实例或者是List子类的实例(接口和类具有相同继承语义);(2)list的size相等;(3)对应位置上的每个元素相等,通过元素的equals判断;满足上述3个条件则返回true
hashCode函数
根据列表元素hash值来计算列表hash值,能够保证通过equals判断相等的list的hashCode也相等。