ArrayList和LinkedList源码分析总结
2017-04-13 16:30
239 查看
ArrayList
1. List集合的特点:有序,元素可以重复;在集合中是不能存放基本数据类型的,只能存放其包装类型。2. 对于任何一个集合来说,集合中存放的是对象的引用,而不是对象本身。
3. ArrayList本身接收的是对象,取出来的时候我们需要把他转换成我们放进去的相应的类型。
4. ArrayList底层采用数组实现,当使用不带参数的构成方法生成ArrayList对象的时候,实际上会在底层生成一个长度为10的Object类型数组。简单来说ArrayList内部实现是数组。
List<String> list= new ArrayList<String>();
5. 如果增加的元素个数超过了10个,那么ArrayList底层会新生成一个数组,长度为原来数组的1.5倍+1,然后将原数组的内容复制到新数组中,并且后续增加的内容都会放到新数组当中,当新数组无法容纳增加的元素时,重复该过程。集合中不能放入原生数据类型,只能放置对象的引用,我们需要使用原生数据类型的包装类才能加入到集合当中。
6. ArrayList的一些特性都来源于数组:有序、元素可重复、插入慢、 索引快 等等一系列神马所谓的属性;
7. 关于源码中的transient关键字:
一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java的这种序列化模式为开发者提供了很多便利,可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和方法都会自动序列化。但是有种情况是有些属性是不需要序列号的,所以就用到这个关键字。只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
LinkedList
1. LinkedList底层通过结点来实现的,它有2个Node结点属性,一个根结点first,一个尾结点last。添加的元素是保存在Node结点属性中item,看下面JDK源码,然后通过Node还有2个属性next和prev分别指向后一个保存元素的结点和指向前一个保存元素的结点;就这样形成一条逻辑上的一条链,它们在堆内存中内存是不连续的;所以LinkedList类的特点:访问元素的效率不高,但是插入和删除元素的效率高,因为通过结点改变指向就可以实现了。相关文章推荐
- 集合框架源码分析三(实现类篇ArrayList,LinkedList,HashMap)
- java非并发容器ArrayList 和 LinkedList 优缺点比较及其实现源码分析
- 从源码分析ArrayList和LinkedList的差别
- Java 集合系列之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- ArrayList和LinkedList和Vector源码分析
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java中arraylist和linkedlist源码分析与性能比较
- java集合--List总结(LinkedList, ArrayList等使用场景和性能分析)
- 分析Java中ArrayList与LinkedList列表结构的源码
- ArrayList 和 LinkedList 源码分析
- 集合框架源码分析三(实现类篇ArrayList,LinkedList,HashMap)
- java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
- List总结(LinkedList, ArrayList等使用场景和性能分析) [From skywang12345 ]
- java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- 分析Java中ArrayList与LinkedList列表结构的源码
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- ArrayList和LinkedList源码分析