目录
特点:
具体实现类的特点
- ArrayList:①作为List接口的主要实现类。
- ②线程不安全的,效率较高。
- ③底层使用Object数组来进行存储
-
-
- LinkedList:①底层使用双向链表来进行存储。
- ②对于频繁的插入和删除操作效率比较高。
-
-
- Vector:①作为List接口的古老实现类,在Java1就已经存在了。
- ②线程安全的,效率较低。
- ③底层使用Object数组来进行存储。
jdk7中的源码分析
①当使用空参构造器创建对象时,底层创建了一个长度为10的Object数组。
②添加数据时,先判断当前Object数组长度是否足够,如果长度足够则直接添加;如果长度不够则先将底层数组长度扩容为原来容量的1.5倍,同时将原有数组赋值给新数组。
建议:因为当底层数组不够长时需要扩容,所以如果知道大概要存储多少数据,则建议使用带参构造器来指定底层数组的长度。
jdk8中的源码分析
①使用空参构造器创建对象时,底层初始化为{}。
②在第一次调用add()方法时底层才创建长度为10的Object数组。
③后续添加数据同jdk7同样。
jdk7中的ArrayList类似于单例模式中的饿汉式,jdk8中的类似于懒汉式,延迟了数组对象的创建,节省了内存。
在LinkedList中定义了内部类Node,每个Node对象对应双链表中的一个节点。
除了在扩容时将容量变为原来容量的两倍之外其他和jdk7中ArrayList一样。