码迷,mamicode.com
首页 > 其他好文 > 详细

集合总结

时间:2016-10-12 11:16:47      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

了解集合先复习一下数据结构,线性表(ArrayList),链式表(LinkedList),红黑树表(TreeSet)
哈系表(HashSet)链式哈系表(LinkedHashSet)枚举表(EnumSet)队列: 栈                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             (Queue先进先出 栈)
双端队列(Deque)

HashSet 通过hashCode值来判断存储位置,如果hashCode相同时,通过equals判断是存储还是在相同位置追加链式结构。
因此判断是否为同一元素的标准是equals和hashCode都相等。
LinkedHashSet 会使用链表形式维护元素数据,使元素看起来是以插入顺序保存的,性能要略低于HashSet.  HashSet相当于HashMap去掉Value
TreeMap    没有实现Comparable接口但是把Map.Entry传入compareTo()方法
TreeSet 如果希望TreeSet能正常运行,TreeSet只能添加同一种类型的对象。
并且通过compareTo()判断存储位置,如果两个对象比较相等则新对象无法添加到TreeSet集合中。
判断对象是否相等只有compareTo()一个标准,就是返回值如果是0就相等。
写compareTo()的规则是compareTo()返回0时,equals()也应该返回true,如果返回false则不将第二个元素添加进去与Set集合的规则产生冲突。
为了程序健壮性,不要修改放入HashSet和TreeSet集合中元素的关键实例变量。
修改Comparator接口中的compare方法可实现倒序排序。

List判断两个对象是否相等的标准是equals()方法返回true即可。
删除时会判断两个对象的equals方法是true就删除一条记录。

PriorityQueue 按队列元素大小进行重新排序,其实违反了先进先出的原则,并且采用自然/定制排序,确保重写的equals和compareTo的一致性。

ArrayDeque基于数组,可当成双端队列和栈来使用。numElements参数指定数组长度
ArrayList和ArrayDeque两个集合类的实现机制相似,底层都采用动态可重新分配的Object[]数组来存储集合元素,超出容量会重新分配一个数组来存储集合元素。
LinkedList集合可作为List集合、双端队列、栈来使用。 但其实现机制与ArrayDeque却不同。
其内部是以链表保存集合元素的。随机访问集合元素时性能较差。插入删除元素性能出色。
ArrayList和ArrayDeque随机访问会被映射成对数组元素的访问,而链表只能迭代访问。

ArrayList和LinkedList是线性表的典型实现,Queue队列,Deque双端队列。
性能上讲:ArrayList 随机访问强,LinkedList增删强,总体ArrayList强。
ArrayList和Vector随机访问(数组),LinkedList则用迭代器。
如果多线程访问可以考虑用Collections.synchronizedList();

 

Hashtable是线程安全的,Hashtable不允许key value为null 但HashMap可以,key可出现一次,vlaue可出现多次,都不能保证key-value对的顺序 value相等的标准是只要value的equals相等就可以。并且也是key的hashcode相等 equals不等就会在原对象之后以链表形式存储新对象。LinkedHashMap是双向链表,可以记录键值对的插入顺序。

Properties是Hashtable的子类,可以把Map对象和属性文件关联起来,由于属性文件的属性名和属性值只能是字符串类型,所以键值对也都是字符串类型。

(SortedMap接口)TreeMap就是一个红黑树数据结构,每个键值对作为红黑数的一个节点。可以保证所有的键值对处于有序状态。也有自然排序和定制排序。

两个key通过compareTo方法返回0,则认为两个key是相等的。如果向让TreeMap良好的工作,则重写该类的equals方法和compareto方法

 

WeakHashMap实现类 HashMap的key保留了对实际对象的强引用,这意味着只要HashMap对象不被销毁,该HashMap的所有key所引用的对象就不会被垃圾回收,但WeakHashMap的key只保留了对实际对象的弱引用,所以key所引用的对象可能被垃圾回收,也可能自动删除这些key所对应的键值对,

当垃圾回收了该key所对应的实际对象之后,WeakHashMap会自动删除该key对应的键值对。(系统会自动保留对字符串对象的强引用,尽量不要用字符串作为key否则将失去意义)

 

IdentityHashMap实现机制基本相似,但key相等时比较特殊,仅当两个key严格相等时(key1==key2)才会认为两个key相等。

买 数据结构 和 java栈内存

集合总结

标签:

原文地址:http://www.cnblogs.com/koala2016/p/5951600.html

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