码迷,mamicode.com
首页 > 编程语言 > 详细

java容器总结

时间:2016-05-12 23:42:51      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

容器大体分为两类:Collection和Map。
区别:
1 Collection中存储了一组对象,而Map存储键值对。
2 Collection的子类都实现了iterator这个方法,该方法能返回一个Iterator对象。

Collection的具体实现包括List和Set。
区别:
1 List是有序的,元素可以重复的,Set是无序的,元素不可以重复。
2 Set的value最多只能存一个null。

List的具体实现包括LinkedList,ArrayList,Vector和Stack。
区别:
1 LinkedList底层是通过链表实现的,所以在中间插入快,但是定位查找慢,是非线程安全的。
2 ArrayList底层是通过数组实现的,所以在中间插入慢,但是定位查找快。
3 Vector底层也是数组,可以理解为线程安全的ArrayList。
4 Stack是后进先出(LIFO)的数据结构,是栈。

Set的具体实现包括HashSet,LinkedHashSet,TreeSet,EnumSet。
区别:
1 HashSet 集合存入元素时,会调用该对象的hashCode()方法得到hashCode值,根据hashCode值决定对象在HashSet中存储的位置,如有两个元素通过equals方法比较返回true,但它们的hashCode不同,HashSet会把它们存储在不同位置,也就可以添加成功。
2 LinkHashSet 比HashSet 多了一个插入元素时维护元素次序的链表,这样使得元素看起来是以插入的顺序保存,也就是说在遍历LinkHashSet时,将会按元素添加的顺序访问集合里的元素,因此它在插入元素时性能比HashSet略低,但在遍历时性能比HashSet高,因为它以链表来维护内部顺序。
3 TreeSet是SortedSet接口的唯一实现,可以确保元素处于排序状态。
4 EnumSet是一个专门为枚举类设计的集合类,其中所有元素都必须是指定枚举类型的枚举值,该枚举值类型在创建EnumSet时显式或隐式地指定。其集合元素也是有序的,其以枚举值在Enum类内定义的顺序来决定集合元素的顺序。

Map的实现类包括Hashtable,HashMap,WeakHashMap。
区别:
1 HashMap底层是数组加链表,是非线程安全的。
2 Hashtable底层是数组加链表,是线程安全的。
3 WeakHashMap是一种改进的HashMap,它对key实行弱引用,如果一个key不再被外部引用,那么该key可以被回收。

总结:
1 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
2 如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同事操作一个类,应该使用同步的类。
3 要特别注意哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
4 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

java容器总结

标签:

原文地址:http://blog.csdn.net/liudezhicsdn/article/details/51347435

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!