Java 的?java.util.Collections
?類提供了一組靜態方法,用于操作或返回集合(如列表、集合和映射)。Collections
?類是一個實用工具類,旨在為集合提供便捷的算法和操作。以下是對?Collections
?類及其常用方法的介紹。
常用方法總結
- 排序:
sort(List<T> list)
、sort(List<T> list, Comparator<? super T> c)
- 查找:
binarySearch(List<? extends Comparable<? super T>> list, T key)
、binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
- 反轉:
reverse(List<?> list)
- 旋轉:
rotate(List<?> list, int distance)
- 填充:
fill(List<? super T> list, T obj)
- 復制:
copy(List<? super T> dest, List<? extends T> src)
- 最小和最大:
min(Collection<? extends T> coll)
、max(Collection<? extends T> coll)
- 同步集合:
synchronizedList(List<T> list)
、synchronizedSet(Set<T> s)
、synchronizedMap(Map<K, V> m)
- 不可變集合:
unmodifiableList(List<? extends T> list)
、unmodifiableSet(Set<? extends T> s)
、unmodifiableMap(Map<? extends K, ? extends V> m)
排序
sort(List<T> list)
:對列表進行升序排序,列表中的元素必須實現?Comparable
?接口。
List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);
Collections.sort(numbers); // 排序后,numbers為 [1, 2, 3, 4, 5]
sort(List<T> list, Comparator<? super T> c)
:根據指定的比較器對列表進行排序。
List<String> names = Arrays.asList("Charlie", "Alice", "Bob");// 根據字符串長度排序
Collections.sort(names, (s1, s2) -> s1.length() - s2.length());
注:Collections.sort(names, (s1, s2) -> s1.length() - s2.length()) 中 (s1, s2) -> s1.length() - s2.length() 這是一個 Lambda 表達式,用于實現 Comparator 接口的 compare 方法。
查找
binarySearch(List<? extends Comparable<? super T>> list, T key)
:使用二分搜索法在列表中查找元素,返回索引。列表必須是已排序的。
List<Integer> sortedNumbers = Arrays.asList(1, 2, 3, 4, 5);
int index = Collections.binarySearch(sortedNumbers, 3); // 返回索引 2
binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
:使用二分搜索法在指定比較器的列表中查找元素。
List<String> sortedNames = Arrays.asList("Alice", "Bob", "Charlie");
int index = Collections.binarySearch(sortedNames, "Bob", String::compareTo); // 返回索引 1
最大和最小值
max(Collection<? extends T> coll)
:返回集合中的最大元素。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int max = Collections.max(numbers); // 返回 5
min(Collection<? extends T> coll)
:返回集合中的最小元素。
int min = Collections.min(numbers); // 返回 1
逆序
reverse(List<?> list)
:將列表中的元素反轉。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Collections.reverse(numbers); // 反轉后,numbers為 [5, 4, 3, 2, 1]
隨機化
shuffle(List<?> list)
:對列表進行隨機打亂。
Collections.shuffle(numbers); // numbers的元素順序將被隨機打亂
填充
fill(List<? super T> list, T obj)
:用指定元素替換列表中的所有元素。
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
Collections.fill(list, "z"); // list 現在是 ["z", "z", "z"]
拷貝
copy(List<? super T> dest, List<? extends T> src)
:將源列表中的所有元素復制到目標列表中。
List<String> dest = Arrays.asList(new String[3]);
List<String> src = Arrays.asList("a", "b", "c");
Collections.copy(dest, src); // dest 現在是 ["a", "b", "c"]
不可變集合
unmodifiableList(List<? extends T> list)
:返回一個不可修改的視圖。
List<String> list = Arrays.asList("a", "b", "c");
List<String> unmodifiableList = Collections.unmodifiableList(list);
// unmodifiableList.add("d"); // 會拋出 UnsupportedOperationException
同步集合
synchronizedList(List<T> list)
:返回一個線程安全的列表。
List<String> list = new ArrayList<>();
List<String> syncList = Collections.synchronizedList(list);
示例總結
以下是一個綜合示例,展示了?Collections
?類的一些常用方法:
import java.util.*;public class CollectionsExample {public static void main(String[] args) {List<Integer> numbers = new ArrayList<>(Arrays.asList(5, 3, 1, 4, 2));// 排序Collections.sort(numbers);System.out.println("排序后: " + numbers);// 反轉Collections.reverse(numbers);System.out.println("反轉后: " + numbers);// 隨機打亂Collections.shuffle(numbers);System.out.println("隨機打亂后: " + numbers);// 查找最大和最小值int max = Collections.max(numbers);int min = Collections.min(numbers);System.out.println("最大值: " + max + ", 最小值: " + min);// 二分搜索Collections.sort(numbers);int index = Collections.binarySearch(numbers, 3);System.out.println("元素 3 的索引: " + index);// 同步集合List<String> syncList = Collections.synchronizedList(new ArrayList<>());syncList.add("a");syncList.add("b");System.out.println("同步集合: " + syncList);}
}
通過使用?Collections
?類提供的這些方法,可以方便地對集合進行各種操作,提高代碼的可讀性和維護性。
參考:
Collections (Java SE 17 & JDK 17)