- 比较ArrayList、LinkedList、Vector的异同:
- 同:
-
三个类都实现了List接口,存储的数据都是有序可重复的数据。
- 异:
-
ArrayList:作为List接口的主要实现类,线程不安全,效率高:使用Object【】存储.elementData存储
-
LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList效率高:底层使用的双向链表存储
-
Vector:作为List接口的一个古老实现类,线程安全,效率低.使用Object【】存储elementData存储
- ArrayList的源码分析:jdk7的源码分析:
-
ArrayList list=new ArrayList();//底层创建了长度为10的Objecct【】数组ElementData
-
list.add(123); //elementData[0]=new Interger(123);
-
```
-
list.add(11);//如果此次的添加导致了底层elementData数组容量不够,则扩容
-
默认情况下,扩容为原来的1.5倍,同时需要将原有数组中的数据复制到新的数组中。
-
结论:
-
建议开发中使用带参的构造器:ArrayList list=new ArrayList(int capacity)
*ArrayList的源码分析:jdk8的源码分析:
-
ArrayList list=new ArrayList();//底层Objecct【】elementData初始化为【】,并没有创建长度
-
list.add(123);//第一次调用add()时,底层才创建了长度10的数组,并将数据123添加到elementData
-
后续添加与扩容与jdk7无异
*小结: jdk7中的ArrayList对象创建类似于单例中的饿汉式,而jdk8中的ArrayList的对象的创建类似于单例的懒汉式,
- 延迟了数组的创建,节省了内存