Collection接口与 Collections、Comparator和Comparable区别
1. Collection接口,哪些类实现了Collection接口;
Collection下有三大接口:List(列表)
、Set(集合)
、Queue(队列)
1)
List接口
项目 线程安全? 实现 扩容 定点添加/删除 尾添加/删除 查询 修改
ArrayList 否 数组 50% O(n) O(1) O(1) O(1)
Vector 是 数组 100% O(n) O(1) O(1) O(1)
LinkedList 否 双链表 — O(n) O(1) O(n) O(n)
可见ArrayList越往后插入越快,因为要变动的元素越少;
LinkedList从两头到中间速度变慢,取决于链表的查询机制,总的来说,随机添加LinkedList比较有优势些,只是末尾添加ArrayList较好;
2)Set接口
Set一般基于Map来实现:HashSet、LinkedHashSet、TreeSet的特性,根本上是HashMap、LinkedHashMap、TreeMap的特性;
(1)HashSet
HashSet内部有一个HashMap
按照哈希的顺序:hashCode(),equals(Object obj)
底层实现:HashMap
(2)LinkedHashSet
LinkedHashSet是HashSet的子类,源码少得可怜,基本上都是调用父类(HashSet)的构造方法
基于一个由链表实现的哈希表,保留了元素插入顺序
底层实现:LinkedHashMap
(3)TreeSet—-有序集合
实现NavigableSet:使用元素的compareTo对元素进行排序,也可使用Comparator自定义比较器
TreeSet多拜了一个师傅:NavigableSet—>SortedSet 使用方法也多几个
底层实现:TreeMap
项目 线程安全? 实现 add remove contains
HashSet 否 HashMap O(1) O(1) O(1)
LinkedHashSet 否 LinkedHashMap O(1) O(1) O(1)
TreeSet 否 TreeMap O(log(n)) O(log(n)) O(log(n))
————————————————原文链接:https://blog.csdn.net/qq\_30447263/article/details/83034711
3)Queue
子类常见的有PriorityQueue(优先队列)和上文提到的LinkedList。
PriorityQueue优先队列,是基于数组实现的二叉堆来实现的特殊队列,具有完全二叉树的性质。
每次从优先队列中取出来的元素要么是最大值或最小值(最大堆/最小堆)
2. Collections用过什么;
Collections提供以下方法对List进行排序操作
1)Shuffle(element):洗牌方法,将当前集合内的数据进行随机排序。
2)Reverse(element):逆序排序,对当前集合的元素按照相反的顺序进行排序
3)Sort(element):对当前集合进行升序排序,实现Comparable接口的类,只能使用一种排序方案,这种方案叫作“自然比较”方案。
4)void sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑
5)void swap(List list, int i , int j),交换两个索引位置的元素
6)void rotate(List list, int distance),旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面。
3. Comparator和Comparable;
1)Comparable 是排序接口。
若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排序,假设现在存在“实现Comparable接口的类的对象的List列表(或数组)”,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。
此外,“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。
2)Comparator 是比较器接口。
我们若需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口);那么,我们可以建立一个“该类的比较器”来进行排序。这个“比较器”只需要实现Comparator接口即可。
也就是说,我们可以通过“实现Comparator类来新建一个比较器”,然后通过该比较器对类进行排序。
还没有评论,来说两句吧...