java集合list接口下的ArrayList,LinkedList的性能选择
2017-10-02 22:22
295 查看
一.集合中线程安全的类有:vector,stack,hashtable,enumeration,除此之外均是非线程安全的类与接口
collection结构参考如图:
二。java.util.List
ArrayList和LinkedList
1.ArrayList是实现了基于动态数组的数据结构。
ArrayList的层级结构如图所示:
2.LinkedList
1)LinkedList的继承关系如图:
2)LinkedList底层的数据结构是基于双向循环链表的,且头结点中不存放数据,如下:
ArrayList:
读取:从指定的位置(用index)检索一个对象其时间复杂度可表示为O(1)。
插入和删除:如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。
LinkedList:在插入、删除集合中任何位置的元素所花费的时间都是一样的—O(1) ,但它在索引一个元素的时候比较慢,为O(i),其中i是索引的位置。 因为LinkedList中的get方法是按照顺序从列表的一端开始检查,直到另外一端。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
结论:数组访问快,插入和删除慢。链表插入和删除快但读取较慢。
而属于数组的list有:ArrayList,Vector。
属于链表的list有:LinkedList
三。集合中几种遍历方式的性能比较
ForEach和Iterator都是通过迭代的方式,故其效率基本一致。
结论:(1)对于ArrayList和LinkedList,在size小于1000时,每种方式的差距都在几ms之间,差别不大,选择哪个方式都可以。
(2)对于ArrayList,无论size是多大,差距都不大,选择哪个方式都可以。
(3)对于LinkedList,当size较大时,建议使用迭代器或for-each的方式进行遍历,否则效率会有较明显的差距。
所以,综合来看,建议使用for-each,代码简洁,性能也不差。同时也要注意使用for-each前一定要做非空判断。
具体的测试报告请参考:
http://blog.csdn.net/dengnanhua/article/details/64692191
collection结构参考如图:
二。java.util.List
ArrayList和LinkedList
1.ArrayList是实现了基于动态数组的数据结构。
ArrayList的层级结构如图所示:
2.LinkedList
1)LinkedList的继承关系如图:
2)LinkedList底层的数据结构是基于双向循环链表的,且头结点中不存放数据,如下:
ArrayList:
读取:从指定的位置(用index)检索一个对象其时间复杂度可表示为O(1)。
插入和删除:如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。
LinkedList:在插入、删除集合中任何位置的元素所花费的时间都是一样的—O(1) ,但它在索引一个元素的时候比较慢,为O(i),其中i是索引的位置。 因为LinkedList中的get方法是按照顺序从列表的一端开始检查,直到另外一端。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
结论:数组访问快,插入和删除慢。链表插入和删除快但读取较慢。
而属于数组的list有:ArrayList,Vector。
属于链表的list有:LinkedList
三。集合中几种遍历方式的性能比较
ForEach和Iterator都是通过迭代的方式,故其效率基本一致。
结论:(1)对于ArrayList和LinkedList,在size小于1000时,每种方式的差距都在几ms之间,差别不大,选择哪个方式都可以。
(2)对于ArrayList,无论size是多大,差距都不大,选择哪个方式都可以。
(3)对于LinkedList,当size较大时,建议使用迭代器或for-each的方式进行遍历,否则效率会有较明显的差距。
所以,综合来看,建议使用for-each,代码简洁,性能也不差。同时也要注意使用for-each前一定要做非空判断。
具体的测试报告请参考:
http://blog.csdn.net/dengnanhua/article/details/64692191
相关文章推荐
- JavaSE入门学习35:Java集合框架之List接口及其实现类ArrayList和LinkedList
- Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java集合源码学习(8)_List接口的实现_CopyOnWriteArrayList
- java集合:ArrayList,Vector, LinkedList的存储性能和特性
- (9) java ---- 集合框架图 ArrayList,LinkedList,Vector各自的性能特点及区别
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java集合源码学习(6)_List接口的实现_ArrayList_Vector
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java集合源码学习(7)_List接口的实现_LinkedList
- Java【集合系列】-08-List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- JAVA学习.JAVA集合类型Collection.List.ArrayList&LinkedList
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java集合系列:-----------06List的总结(LinkedList,ArrayList等使用场景和性能分析)