首页 > 代码库 > 集合总结
集合总结
了解集合先复习一下数据结构,线性表(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栈内存
集合总结