Java中常用集合效率比较

一 List

List继承collection,有序,元素可重复。

实现类:

ArrayList,数组方式实现的,是线程不安全的;Vector 是线程安全的;LinkedList 是线程不安全的,底层是由链表实现的 。

ArrayList与LinkedList在效率上有些互补,LinkedList进行插入和删除操作的速度是最快的,访问较慢,ArrayList进行随机访问的速度很快,插入较慢;

二 Set

Set继承collection,元素不能重复。

实现类:

HashSet,常用的set实现类,

LinkedHashSet,具有 HashSet 的查询速度,且内部使用链表维护元素的顺序 ( 插入的次序 ) 。于是在使用迭代器遍历 Set 时,结果会按元素插入的次序显示。

TreeSet,保存次序的 Set, 底层为树结构。

在插入、查找方面,HashSet 通常优于TreeSet. hashSet查询和删除和增加元素的效率都非常高.

三 Map

键值对的形式

实现类:

HashMap,线程不安全,key和value都能为空

Hashtable,线程安全,key和value都不能为空

LinkedHashMap ,类似于 HashMap ,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,只比 HashMap 慢一点。而在迭代访问时发而更快。

四 迭代方式

1 传统的for循环遍历,基于计数器的:

顺序存储:读取性能比较高。适用于遍历顺序存储集合。

链式存储:时间复杂度太大,不适用于遍历链式存储的集合。

2.迭代器遍历,Iterator:

顺序存储:如果不是太在意时间,推荐选择此方式,毕竟代码更加简洁,也防止了Off-By-One的问题。

链式存储:意义就重大了,平均时间复杂度降为O(n),还是挺诱人的,所以推荐此种遍历方式。

在使用时,根据自己的需求选择合适的集合。