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
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
相关文章推荐
- JAVA 常用集合接口List、Set、Map总结
- Java容器学习笔记(二) Set接口及其实现类的相关知识总结
- Java容器学习笔记(二) Set接口及其实现类的相关知识总结
- JAVA的容器---List Map Set
- java 常用集合list与Set、Map区别及适用场景总结
- JAVA的容器---List Map Set
- JAVA的容器---List,Map,Set (转)
- 深入Java源码解析容器类List、Set、Map
- 【Java基础】 (List、Set、Map、Stack、Queue)总结
- java 常用集合list与Set、Map区别及适用场景总结
- 【Java】----容器Set/List/Map 的区别
- Hibernate三种容器(List,Set,Map)映射技术之Map映射
- JAVA三种集合LIST、SET、MAP
- Java中List Set Map 是否有序等总结
- Java中array、Set、List和Map的比较总结
- JAVA,List,Map,Set,容器
- java 常用集合list与Set、Map区别及适用场景总结
- java集合包List、Set、Map总结
- java 常用集合list与Set、Map区别及适用场景总结
- Java中List Set Map 是否有序等总结