java 容器类 小结

JAVA的容器类库,就是JAVA的数据结构。本文主要对List,Map,Set 的应用以及性能进行一番归纳和总结。下图为:容器类之间的层次关系:

Collection 它是最基本的接口;它派生出了子接口ListSetQueue
List                           有序的Collection;允许含有重复元素
│├LinkedList              链表结构;非同步(线程不安全);允许插入null
│├ArrayList                数组结构;非同步(线程不安全) ;允许插入null
│└Vector                    数组结构;同步(线程安全); 允许插入null
Set     不包含重复元素的Collection

│├TreeSet                 自然排序结构; 非同步(线程不安全);不允许插入null

│└HashSet                无序结构;非同步(线程不安全);允许插入null

└ └LinkedHashSet     有序结构;非同步(线程不安全);允许插入null
Map

TreeMap                   自然排序结构; 非同步(线程不安全);不允许使用 null
Hashtable                 无序结构;同步(线程安全); 不允许使用 null 值和 null
HashMap                   无序结构;非同步(线程不安全);允许使用 null 值和 null
LinkedHashMap         顺序结构;非同步(线程不安全);允许使用 null 值和 null

LinkedListArrayListVector的性能分析,详见代码:

上述程序JDK1.5的输出结果:

----------------这是 arrayList----------------

集合尾部追加数据耗时:109 毫秒

集合顺序访问数据耗时:47 毫秒

集合随机删除数据耗时:1156 毫秒

----------------这是  vector  ----------------

集合尾部追加数据耗时:125 毫秒

集合顺序访问数据耗时:125 毫秒

集合随机删除数据耗时:1156 毫秒

----------------这是 linkedList---------------

集合尾部追加数据耗时:313 毫秒

集合顺序访问数据耗时:31 毫秒

集合随机删除数据耗时:5469 毫秒

 

输出完毕 (耗时 8 ) - 正常终止

LinkedListArrayListVector 对比:

1)上述集合类都可以用来持有有序个Object;可以包含重复值;允许null

2)ArrayListLinkedList非线程安全、Vector线程安全

3)ArrayList内部使用的数组实现,随机查找速度较快,不适合在中间位置插入或删除数据,因为在集合的中间位置插入或删除数据之后,将导致此位置之后的数据全部移动,消耗性能。

4)LinkedList顺序查找速度较快、插入或者删除数据速度一般

 

总结:不考虑线程安全:建议使用ArrayList,除非经过实践证明LinkedList可以拥有更好的性能。考虑线程安全,则需要使用Vector

 

备注:线程不安全的集合也可以通过Collections.synchronizedMap()synchronizedList() synchronizedSet())表现为线程安全的集合类

 

HashSetLinkedHashSetTreeSet的性能分析,详见代码:

上述程序JDK1.5的输出结果:

----------------这是 HashSet-----------------

集合尾部追加数据耗时:484 毫秒

集合顺序访问数据耗时:31 毫秒

集合随机删除数据耗时:0 毫秒

----------------这是 LinkedHashSet-----------

集合尾部追加数据耗时:485 毫秒

集合顺序访问数据耗时:15 毫秒

集合随机删除数据耗时:0 毫秒

----------------这是 TreeSet-----------------

集合尾部追加数据耗时:641 毫秒

集合顺序访问数据耗时:15 毫秒

集合随机删除数据耗时:0 毫秒

 

输出完毕 (耗时 1 ) - 正常终止

 

HashSetLinkedHashSetTreeSet 对比:

1)上述集合类都可以用来持有多个不重复的Object;线程不安全

2) HashSet 无序、LinkedHashSet顺序、TreeSet自然排序

3) HashSet LinkedHashSet允许null,TreeSet不允许null

4) TreeSetLinkedHashSetTreeSet三者性能相当

 

总结:因为他们都是线程不安全的,多线程情况需要注意。根据排序的不同可以选择不同的Set来满足自己的实际编程需求

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值