Java中常用集合效率比较

Posted jameszheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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),还是挺诱人的,所以推荐此种遍历方式。

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

以上是关于Java中常用集合效率比较的主要内容,如果未能解决你的问题,请参考以下文章

JAVA-初步认识-常用对象API(集合框架-treeset集合-二叉树)

java基础---集合

Java常用的集合类(转)

Java大集合求交集的方法比较

Java集合和数组的比较(为什么引入集合)

Java基础加强之集合