美文网首页
java.util ArryList相关类解读

java.util ArryList相关类解读

作者: 小代码 | 来源:发表于2017-05-16 13:10 被阅读0次
  1. List接口
    先看下List接口所提供的方法以及对比Collection接口,有哪些是新增方法(红红框框着的是新增的方法):
List接口

从图中可以看出新增的方法是随机访问类、迭代等方法。

  1. AbstractList抽象实现类
    抽象实现类继承了AbstractCollection类,实现了List接口
AbstractList Head

其中的方法也主要是使用Iterator来处理的,当然由于是List所以使用了ListIterator
看图:

ListIterator使用

在类的内部也实现了Itr静态内部类提供给父接口Iteraotr

Itr

实现ListIterator的接口(具体ListIterator包含那些看看API,主要是提供*prev,*index,add*,set*),那么现在我们来看下ListItr实现类都干了些什么吧。

ListItr.png

主要实现ListIterator<E>*prev,*index,add*,set*这些方法,原理也是使用Iterator

  1. ArrayList实现类
    ArrayList的类图结构如下:
ArrayList head.png

内部结构使用elementData和size实现:


Paste_Image.png
Q:为什么ArrayList不可以遍历的时候使用list修改,比如:list.add list.remove。
A:一个 列表是固定的,删除一个那就会导致size不一致,取得的数据也不一样,这样肯定不合适。

Q:为什么使用iterator进行遍历的时候可以修改。
A:使用iterator的时候,遍历对象是iterator,他知道具体改动。不会导致取得的数据不一致,比如:add, remove的时候是当前游标。下次迭代是下一个元素。

Q:是什么原理证迭代的时候不可以使用list.add等方法
A:Itr类中保存了一个expectedModCount值记录期望修改次数,拿expectedModCount和modCount进行比对来确保,方法名叫:checkForComodification()

相关文章

网友评论

      本文标题:java.util ArryList相关类解读

      本文链接:https://www.haomeiwen.com/subject/fgakxxtx.html