java.util ArryList相关类解读

  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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 3.3 集合 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另...
    闫子扬阅读 878评论 0 1
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,690评论 0 3
  • 一.线性表 定义:零个或者多个元素的有限序列。也就是说它得满足以下几个条件:  ①该序列的数据元素是有限的。  ②...
    Geeks_Liu阅读 2,800评论 1 12
  • title: java集合框架学习总结 tags:集合框架 categories:总结 date: 2017-03...
    行径行阅读 1,855评论 0 2
  • 我们在人生的不同时期都会曾不惜一切去追逐当下最执着的想要得到的事物,它也许只是爸爸的专宠、兄弟的情谊、对那个一直暗...
    todtao阅读 268评论 0 0

友情链接更多精彩内容