Java中的Collections类
Collections 类是Java集合框架中的实用程序类之一。java.util包含Collections类。Collections类基本上与静态方法一起使用,这些静态方法对集合进行操作或返回集合。如果传递给方法的集合或对象为null,则此类的所有方法均会抛出 NullPointerException 异常。
语法: 声明
public class Collections
extends Object
请记住: Object是所有类的父类。
Collections类字段
集合类基本上包含3个字段,如下所示,可用于返回不可变实体。
- EMPTY_LIST 以获取不可变的空List
- EMPTY_SET 以获取不可变的空Set
- EMPTY_MAP以获取不可变的空Map
现在让我们讨论这个类中存在的方法,以便我们稍后可以在程序中使用这些内置功能。以下是方法按表格格式列出的列表,如下所示:
方法 | 描述 |
---|---|
addAll(Collection super T> c, T… elements) | 将指定集合元素插入到指定集合中。 asLifoQueue(Deque binarySearch(List extends Comparable> list, T key) | 在指定的列表中使用二分搜索算法搜索关键字。 binarySearch(List extends T> list, T key, Comparator super T> c) | 使用二分搜索算法在指定列表中搜索指定对象。 checkedCollection(Collection checkedList(List checkedMap(Map checkedNavigableMap(NavigableMap checkedNavigableSet(NavigableSet checkedQueue(Queue checkedSet(Set checkedSortedMap(SortedMap checkedSortedSet(SortedSet copy(List super T> dest, List extends T> src) | 将一个列表中的所有元素复制到另一个列表中。 disjoint(Collection> c1, Collection> c2) | 如果两个指定的集合没有共同的元素,则返回true。 emptyEnumeration() | 返回没有元素的枚举。 emptyIterator() | 返回没有元素的迭代器。 emptyList() | 返回一个空list(不可变)。 emptyListIterator() | 返回一个没有元素的列表迭代器。 emptyMap() | 返回一个空map(不可变)。 emptyNavigableMap() | 返回一个空可导航map(不可变)。 emptyNavigableSet() | 返回一个空可导航set(不可变)。 emptySet() | 返回一个空set(不可变)。 emptySortedMap() | 返回一个空排序map(不可变)。 emptySortedSet() | 返回一个空排序set(不可变)。 emptySortedMap() | 此方法返回一个空的排序映射(不可变)。 emptySortedSet() | 此方法返回一个空的排序集合(不可变)。 enumeration(Collection fill(List super T> list, T obj) | 此方法用指定的元素替换指定列表中的所有元素。 frequency(Collection> c, Object o) |
此方法返回指定集合中等于指定对象的元素数量。 |
indexOfSubList(List> source, List> target) | 此方法返回指定源列表中指定目标列表第一次出现的起始位置,若未找到,则返回-1。 |
lastIndexOfSubList(List> source, List> target) | 此方法返回指定源列表中指定目标列表最后一次出现的起始位置,若未找到,则返回-1。 |
list(Enumeration |
此方法返回一个数组列表,其中包含由指定枚举返回的元素,按其返回顺序排序。 |
max(Collection extends T> coll) | 此方法按照元素的自然顺序,返回给定集合中的最大元素。 max(Collection extends T> coll, Comparator super T> comp) | 此方法按照指定的比较器顺序,返回给定集合中的最大元素。 min(Collection extends T> coll) | 此方法按照元素的自然顺序,返回给定集合中的最小元素。 min(Collection extends T> coll, Comparator super T> comp) | 此方法按照指定的比较器顺序,返回给定集合中的最小元素。 nCopies(int n, T o) | 此方法返回一个由n个指定对象组成的不可变列表。 newSetFromMap(Map replaceAll(List reverse(List> list) |
此方法颠倒指定列表中元素的顺序。 |
reverseOrder() | 此方法返回一个比较器,在实现Comparable接口的对象集合中,按照它们的自然顺序反向排序。 |
reverseOrder(Comparator |
此方法返回一个比较器,按照指定比较器的相反顺序排序。 |
rotate(List> list, int distance) | 此方法将指定列表中的元素按指定偏移量循环移动。 shuffle(List> list) |
此方法使用默认的随机源,对指定列表进行随机排序。 |
shuffle(List> list, Random rnd) | 此方法使用指定的随机源,对指定列表进行随机排序。 singletonMap(K key, V value) | 此方法返回一个不可变的映射,将只有指定的键映射到指定的值。 singleton(T o) | 此方法返回一个只包含指定对象的不可变集合。 singletonList(T o) | 此方法返回一个只包含指定对象的不可变列表。 sort(List sort(List swap(List> list, int i, int j) |
此方法在指定列表中交换指定位置的元素。 |
synchronizedCollection(Collection |
此方法返回由指定集合支持的同步(线程安全)集合。 |
synchronizedList(List |
此方法返回由指定列表支持的同步(线程安全)列表。 |
synchronizedMap(Map<K,V> m) | 此方法返回由指定映射支持的同步(线程安全)映射。 |
synchronizedNavigableMap(NavigableMap<K,V> m) | 此方法返回由指定可导航映射支持的同步(线程安全)可导航映射。 |
synchronizedNavigableSet(NavigableSet |
此方法返回由指定可导航集合支持的同步(线程安全)可导航集合。 |
synchronizedSet(Set |
此方法返回由指定集合支持的同步(线程安全)集合。 |
synchronizedSortedMap(SortedMap<K,V> m) | 此方法返回由指定排序映射支持的同步(线程安全)排序映射。 |
synchronizedSortedSet(SortedSet |
此方法返回由指定排序集合支持的同步(线程安全)排序集合。 |
unmodifiableCollection(Collection<? extends T> c) | 此方法返回指定集合的不可修改视图。 |
unmodifiableList(List<? extends T> list) | 此方法返回指定列表的不可修改视图。 |
unmodifiableNavigableMap(NavigableMap<K,? extends V> m) | 此方法返回指定可导航映射的不可修改视图。 |
unmodifiableNavigableSet(NavigableSet |
此方法返回指定可导航集合的不可修改视图。 |
unmodifiableSet(Set<? extends T> s) | 此方法返回指定集合的不可修改视图。 |
unmodifiableSortedMap(SortedMap<K,? extends V> m) | 此方法返回指定排序映射的不可修改视图。 |
unmodifiableSortedSet(SortedSet |
此方法返回指定排序集合的不可修改视图。 |
现在我们列出了所有的方法,所以到目前为止我们对于在全球的编程视角下这些方法的重要性有了一点模糊的了解。在编写优化代码时经常使用的重要方法,你会发现在几乎每个java优化代码中都有Collections类的混乱使用。因此,在这里,我们将不仅仅实现方法,还将讨论可以执行的操作,以便在实现相同操作时具有概念上的清晰度和强大的掌握能力。我们将讨论的操作如下:
- 添加元素到集合中
- 对集合进行排序
- 在集合中搜索
- 复制元素
- 不相交集合
操作1: 向集合对象添加元素
java.util.Collections类的addAll()方法用于将所有指定的元素添加到指定的集合中。要添加的元素可能是单独指定的,也可能是作为数组指定的。
示例
// Java程序来演示添加元素
// 使用addAll()方法
// 导入所需的类
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
// 主类
class GFG {
// 主控方法
public static void main(String[] args)
{
// 创建一个列表
// 声明字符串类型对象
List items = new ArrayList<>();
// 将元素添加(项目)到列表中
items.add("鞋子");
items.add("玩具");
// 添加一个或多个元素
Collections.addAll(items, "水果", "板球棒", "球");
// 打印列表内容
for (int i = 0; i < items.size(); i++) {
System.out.print(items.get(i) + " ");
}
}
}
输出
鞋子 玩具 水果 板球棒 球
操作2: 对集合进行排序
java.util.Collections.sort()方法用于按升序对集合中的元素进行排序。java.util.Collections.reverseOrder()方法用于按降序排序。
示例
// Java程序来演示使用sort()方法对集合进行排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
// 主类
class GFG {
// 主控方法
public static void main(String[] args)
{
// 创建一个列表
// 声明字符串类型对象
List items = new ArrayList<>();
// 向列表中添加元素
// 使用add()方法
items.add("鞋子");
items.add("玩具");
// 使用addAll()添加一个或多个元素
Collections.addAll(items, "水果", "板球棒", "鼠标");
// 根据默认顺序对其进行排序
// 使用sort()方法
Collections.sort(items);
// 打印元素
for (int i = 0; i < items.size(); i++) {
System.out.print(items.get(i) + " ");
}
System.out.println();
// 根据相反的顺序排序
Collections.sort(items, Collections.reverseOrder());
// 打印相反的顺序
for (int i = 0; i < items.size(); i++) {
System.out.print(items.get(i) + " ");
}
}
}
输出
板球棒 水果 鼠标 鞋子 玩具
玩具 鞋子 鼠标 水果 板球棒
操作3: 在集合中搜索
java.util.Collections.binarySearch() 方法返回排序之后对象的位置。要使用该方法,列表应以升序排序,否则,该方法返回的结果将是错误的。如果元素存在于列表中,该方法将返回该元素在排序后列表中的位置;否则,方法返回的结果是 –(如果存在,则插入该元素的位置)-1) 。
例子
// Java程序演示二分搜索
//使用Collections.binarySearch()
// 导入需要的类
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
// 主类
//在集合上进行二分搜索
public class GFG {
// 主驱动程序
public static void main(String[] args)
{
// 创建一个List
// 声明字符串类型的对象
List items = new ArrayList<>();
// 使用add()方法将元素添加到对象中
items.add("Shoes");
items.add("Toys");
items.add("Horse");
items.add("Ball");
items.add("Grapes");
// 对List进行排序
Collections.sort(items);
// 在List上进行二分搜索
System.out.println(
"Horse的位置是:"
+ Collections.binarySearch(items, "Horse"));
// 在List上进行二分搜索
System.out.println(
"Dog的位置是:"
+ Collections.binarySearch(items, "Dog"));
}
}
输出
Horse的位置是:2
Dog的位置是:-2
操作4: 复制元素
java.util.Collections 类的copy()方法用于将一个列表中的所有元素复制到另一个列表中。操作完成后,目标列表中每个复制的元素的索引都与源列表中的索引相同。目标列表的长度必须至少与源列表的长度相同,如果它更长,则目标列表中的其余元素不受影响。
例子
// Java程序演示复制元素
//使用copy()方法
// 导入需要的类
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
// 主类
//将一个集合复制到另一个集合中
class GFG {
// 主驱动程序
public static void main(String[] args)
{
// 创建目标列表
List destination_List = new ArrayList<>();
// 添加元素
destination_List.add("Shoes");
destination_List.add("Toys");
destination_List.add("Horse");
destination_List.add("Tiger");
// 打印元素
System.out.println("原始的目标列表是:");
for (int i = 0; i < destination_List.size(); i++) {
System.out.print(destination_List.get(i) + " ");
}
System.out.println();
// 创建源列表
List source_List = new ArrayList<>();
// 添加元素
source_List.add("Bat");
source_List.add("Frog");
source_List.add("Lion");
// 将元素从源列表复制到目标列表
Collections.copy(destination_List, source_List);
// 打印修改后的列表
System.out.println("复制后的目标列表是:");
for (int i = 0; i < destination_List.size(); i++) {
System.out.print(destination_List.get(i) + " ");
}
}
}
输出
原始目标列表是
鞋子 玩具 马 老虎
复制后的目标列表是
蝙蝠 青蛙 狮子 老虎
操作5: 不相交的集合
java.util.Collections.disjoint()用于检查两个指定的集合是否不相交。更正式地说,如果两个集合没有共同的元素,则它们是不相交的。如果这两个集合没有任何共同的元素,则返回true。
例子
// Java程序,用于说明Disjoint函数的工作原理
//导入所需的类
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
//主类
//DisjointCollectionsExample
class GFG {
//主驱动器方法
public static void main(String[] args)
{
//创建list1
List<String> list1 = new ArrayList<>();
//向list1添加元素
list1.add("鞋子");
list1.add("玩具");
list1.add("马");
list1.add("老虎");
//创建list2
List<String> list2 = new ArrayList<>();
//向list2添加元素
list2.add("蝙蝠");
list2.add("青蛙");
list2.add("狮子");
//检查是否不相交
System.out.println(
Collections.disjoint(list1, list2));
}
}
输出
true