2017-07-29 13:49:40
一、Collection的全局继承关系
二、系列文章
备注:
1、ArrayList本质上就是一个数组,所有对外提供的方法都是对数组操作的封装;
2、比如add操作,先扩容,然后插入到数组中;set操作,本质上就是替换操作;删除操作,就是将待删除元素之后所有的元素统统前移一位;indexOf操作,就是遍历数组,找到元素所在位置的下标;
3、此类中依赖元素对象的equals方法,不依赖hashCode方法;
4、此类中扩容、删除等操作,需要操作数组,严重依赖System.arrayCopy()方法;
备注:
1、LinkedList采用双向链表存储、处理元素;
2、定义2个指针:first和last,支持双向操作;
3、LinkedList还提供了很多特有的方法,比如支持队列式访问的方法;
4、其他同ArrayList;
5、LinkedList和ArrayList如何选择?
普通意义上理解,数组按照下标访问元素,速度更快,但是如果是遍历或者使用indexOf,那么ArrayList没什么优势;至于插入和删除,由于ArrayList涉及到扩容,如果ArrayList触发扩容,代价较高,否则,如果插入和删除都在末尾,那么没什么区别,如果是在列表中间,那么LinkedList优势巨大;至于修改元素,ArrayList代价较小,LinkedList需要先遍历得到index位置的元素,才能替换。
结论:
如果有大量的访问、替换操作,且是通过下标来使用的,那么选择Arraylist,这样最能发挥ArrayList的优势。其他比如遍历访问,两者差不多,除此之外的其他使用场景,优先推荐使用LinkedList。
Vector和ArrayList的异同:
1、扩容策略不同;
2、线程安全的;
3、提供了一些独特的如removeElement()之类的方法;
4、其他方法的实现与ArrayList几乎是一致的,毕竟都是对数组的操作;
5、忽略这个类即可;