您的位置:首页 > 编程语言 > Java开发

java中三种容器接口List .Set .Map 及其java容器总结

2011-08-08 19:43 501 查看
1.对 List 的选择

ArrayList 和LinkedList 都实现了List 接口,Vector 也是,不过已经废弃了。首选 ArrayList。

2 ,对 Set 的选择,

可以选择 TreeSet、HashSet,或者LinkedHashSet。HashSet 的性能总是比TreeSet 好(特别是最常用的添加和查询元素操作)。TreeSet存在的唯一原因是,它可以维持元素的排序状态。所以,只有当你需要一个排好序的Set时,才应该使用TreeSet。
注意,对于插入操作,LinkedHashSet 比HashSet 略微慢一点;这是由维护链表所带来
额外开销造成的。不过,因为有了链表,遍历LinkedHashSet 会更快

3,对 Map 的选择

对 Map 不同的实现做选择时,Map 的大小是影响性能最重要的因素,

Hashtable 和HashMap 的效率大致相同。(你也看到了,HashMap 通
常更快一点,所以HashMap 有意取代Hashtable。)TreeMap 通常比HashMap 慢,
为什么还需要它?因为可以使用它生成一个排好序的队列。树的行为方式是:它总是处于
排序状态,不需要专门进行排序操作。当TreeMap 被填充之后,就可以调用keySet(),
取得由“键”组成的Set,然后使用toArray()生成“键”的数组。接下来使用static
Arrays.binarySearch()方法(稍后会讨论),在已排序的数组中快速地查询对象。当然,
你应该只在因为某些原因而无法使用HashMap 的时候,才去这么做。因为HashMap 正
是为快速查询而设计的。而且,你可以很方便地通过TreeMap 生成HashMap。所以,当
你需要使用Map 时,首选HashMap,只有在你需要一个总是排好序的Map 时,才使用
TreeMap。
LinkedHashMap 比HashMap 慢一点,因为它维护散列数据结构的同时还要维护链表。
IdentityHashMap 则具有完全不同的性能,因为它使用==而不是equals()来比较元素 。

java容器总结:

1. 数组将数字与对象联系起来。它保存类型明确的对象,查询对象时,不需要对

结果做类型转换。它可以是多维的,可以保存基本类型的数据。但是,数组

一旦生成,其容量就不能改变。

2.Collection 保存单个的元素,而Map 保存相关联的键值对。

3.像数组一样,List 也建立数字与对象的关联,可以认为数组和List 都是排好序

的容器。List 能够自动扩充容量。但是List 不能保存基本类型,只能保存Object

的引用,因此必须对从容器中取出的Object 结果做类型转换。

4.如果要进行大量的随机访问,就使用ArrayList;如果要经常从List 中间插入或

删除元素,则应该使用LinkedList。

5. 队列、双向队列以及栈的行为,由 LinkedList 提供支持。

6.Map 是一种将对象与对象相关联的设计。HashMap 着重于快速访问;TreeMap

保持“键”始终处于排序状态,所以没有HashMap 快。LinkedHashMap 保

持元素插入的顺序,也可以使用LRU 算法对其重排序。

7. Set 不接受重复元素。HashSet 提供最快的查询速度,TreeSet 保持元素处于排

序状态。LinkedHashSet 以插入顺序保存元素。

8.新程序中不应该使用过时的 Vector、Hashtable 和Stack
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: