1.collection接口:单列集合,用来存储一个一个的对象
2. list接口:存储有序的、可重复的数据。 --->\"动态数组\",替换原有的数组
(1) Arraylist:作为list接口的主要实现类,底层使用Object数组 elementData存储
底层源码分析:
jdk7:
ArrayList list = new ArrayList ();底层创建了一个容量为10的数组
list.add(123)//elementData[0] = new Interger(123);
...
list.add(11)//如果此次导致添加底层elementData数组容量不够,则扩容。默认情况下,扩容为原来容量的1.5倍,同时需要将原有的数组中的数据复制到新的数组中
结论:建议开发中使用代参的构造器:ArrayList list = new ArrayList (int capacity)
jak8中ArrayList的变化
ArrayList list = new ArrayList ();//底层Object[] elementData 初始化为{},并没有创建初始长度为10的数组
list.add(123):第一次调用add()时,底层才创建了长度为10的数组,并将数据123天假到elementData[0]
...
list.add(11)//如果此次导致添加底层elementData数组容量不够,则扩容。默认情况下,扩容为原来容量的1.5倍,同时需要将原有的数组中的数据复制到新的数组中
小结:jdk7中的ArrayList的对象的创建类似于单例的饿汉式,而jdk8中的ArrayList的对象的创建类似于懒汉式,延迟了数组的创建,节省内存。
在jdk1.8中一开始创建的数组中什么数据也没有
(2)LinkedList:对于频繁的插入、删除操作,使用此类比Arraylist效率高,底层使用双向链表存储
源码分析:
LinkedList list = new LinkedList()//内部声明了node类型的first和last属性,默认为空
list.add(123)将123封装到node中,创建了node对象其中Node定义为下图所示:体现了linkedList的双向链表的说法
添加数据
(3)Vector :作为list接口的古老实现类,底层使用Object数组 elementData存储
来源:https://www.cnblogs.com/twq46/p/16468839.html
本站部分图文来源于网络,如有侵权请联系删除。