【集合详解】Java集合总结(上)-Collection家族

今天我们谈一谈集合。

对比数组

①数组长度不可变化。集合可以。
②数组无法保存具有映射关系的数据。如 语文-90。集合可以。
③数组保存的既可以是对象(实际上是保存对象的引用变量),也可以是基本类型的值。集合只保存对象(实际上也是保存对象的引用变量)。

Java的集合类主要由两个根接口派生而出,Collection和Map。这些接口又包含了一些子接口和实现类。我们先看一下Collection家族

Collection家族

这里写图片描述

Collection有三个接口,Queue,List,Set.从左到右,

①Set ,不允许包含相同元素(整个Set类层次的共有属性)
集合里的多个对象之间没有明显的顺序,
且判断对象是否相同,根据equals方法。
②List,运行包含相同的元素。
③Queue为队列。

ArrayDeque,和PriorityQueue

ArrayDeque,和PriorityQueue都实现了Queue接口,即都有队列的特性,区别是PriorityQueue是优先级对列,而ArrayDeque又实现了Deque接口,即有双端队列的特性可以在队列的头部和尾部进行操作。

LinkedList 、ArrayList和Vector

相同点:都实现List接口,都有list的方法。
不同点:
①LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.而且,实现了Queue接口,比List提供了更多的包括Offer(),peek()等方法。更适用于没有大规模的随机读取并且大量的增加/删除操作。
②ArrayList 是一个可改变大小的数组。本质还是数组。添加删除相对LinkedList慢,但是Get,Set快。
③Vector 和ArrayList类似,但属于强同步类。并且线程安全。

TreeSet和hashSet

相同点:都实现Set 都是不重复的元素集合。
不同点:
①hashSet
i:HashSet是使用HASH算法来存储集合中的元素,因此具有良好的存取和查找性能。
ii:其中的元素没有按顺序排列。
iii:HashSet是不同步的,如果需要多线程访问它的话,可以用 Collections.synchronizedSet 方法来包装它。
iiii:HashSet集合判断两个元素相等不单单是equals方法,必须hashCode()方法返回值也要相等。

②TreeSet
此接口主要用于排序操作,是采用树结构实现(红黑树算法)。元素是按顺序进行排列,但是add()、remove()以及contains()等方法都是复杂度为O(log (n))的方法。它还提供了一些方法来处理排序的set.

③LinkedHashSet
介于HashSet和TreeSet之间。 LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置,但和HashSet不同的是,它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。
LinkedHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能,但在迭代访问Set里的全部元素时(遍历)将有很好的性能(链表很适合进行遍历)

总结

今天总结了一下Collection家族各个实现类。我们日常经常会用的还是ArrayList,LinkedList,ArrayDeque,HashSet和TreeSet。其集合的特点和性能以及源码的实现都是值得好好研究的。

猜你喜欢

转载自blog.csdn.net/u010176014/article/details/52122680