面试题:Java中如何使用Collections函数进行集合操作 ?

Collections 是 Java 提供的一个工具类,包含了许多静态方法,用于对集合(如 ListSetMap 等)进行各种操作。以下是 Collections 类中常用的方法及其使用方式:


1. 排序操作

  • sort(List<T> list):对 List 集合进行自然排序(元素需实现 Comparable 接口)。
  • sort(List<T> list, Comparator<? super T> c):对 List 集合进行定制排序(传入 Comparator 对象)。

示例:

List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");

// 自然排序
Collections.sort(list);
System.out.println(list); // 输出: [apple, banana, cherry]

// 定制排序(降序)
Collections.sort(list, (s1, s2) -> s2.compareTo(s1));
System.out.println(list); // 输出: [cherry, banana, apple]

2. 查找操作

  • binarySearch(List<? extends Comparable<? super T>> list, T key):在已排序的 List 中使用二分查找法查找元素。
  • binarySearch(List<? extends T> list, T key, Comparator<? super T> c):在已排序的 List 中使用二分查找法查找元素(传入 Comparator 对象)。

示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

// 二分查找
int index = Collections.binarySearch(list, 3);
System.out.println(index); // 输出: 2

3. 反转操作

  • reverse(List<?> list):反转 List 集合中的元素顺序。

示例:

List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");

Collections.reverse(list);
System.out.println(list); // 输出: [cherry, banana, apple]

4. 随机打乱操作

  • shuffle(List<?> list):随机打乱 List 集合中的元素顺序。

示例:

List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");

Collections.shuffle(list);
System.out.println(list); // 输出: 随机顺序,如 [banana, cherry, apple]

5. 填充操作

  • fill(List<? super T> list, T obj):用指定元素填充 List 集合。

示例:

List<String> list = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));

Collections.fill(list, "fruit");
System.out.println(list); // 输出: [fruit, fruit, fruit]

6. 复制操作

  • copy(List<? super T> dest, List<? extends T> src):将源 List 集合中的元素复制到目标 List 集合中。

示例:

List<String> src = Arrays.asList("apple", "banana", "cherry");
List<String> dest = new ArrayList<>(Arrays.asList("1", "2", "3"));

Collections.copy(dest, src);
System.out.println(dest); // 输出: [apple, banana, cherry]

7. 最大值和最小值

  • max(Collection<? extends T> coll):返回集合中的最大元素(自然排序)。
  • max(Collection<? extends T> coll, Comparator<? super T> comp):返回集合中的最大元素(传入 Comparator 对象)。
  • min(Collection<? extends T> coll):返回集合中的最小元素(自然排序)。
  • min(Collection<? extends T> coll, Comparator<? super T> comp):返回集合中的最小元素(传入 Comparator 对象)。

示例:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

int max = Collections.max(list);
int min = Collections.min(list);
System.out.println("Max: " + max + ", Min: " + min); // 输出: Max: 5, Min: 1

8. 替换操作

  • replaceAll(List<T> list, T oldVal, T newVal):将 List 集合中的所有旧值替换为新值。

示例:

List<String> list = new ArrayList<>(Arrays.asList("apple", "banana", "apple"));

Collections.replaceAll(list, "apple", "fruit");
System.out.println(list); // 输出: [fruit, banana, fruit]

9. 同步集合

  • synchronizedList(List<T> list):返回一个线程安全的 List
  • synchronizedSet(Set<T> s):返回一个线程安全的 Set
  • synchronizedMap(Map<K, V> m):返回一个线程安全的 Map

示例:

List<String> list = new ArrayList<>();
List<String> syncList = Collections.synchronizedList(list);

// 多线程操作
new Thread(() -> syncList.add("apple")).start();
new Thread(() -> syncList.add("banana")).start();

10. 不可变集合

  • unmodifiableList(List<? extends T> list):返回一个不可修改的 List
  • unmodifiableSet(Set<? extends T> s):返回一个不可修改的 Set
  • unmodifiableMap(Map<? extends K, ? extends V> m):返回一个不可修改的 Map

示例:

List<String> list = new ArrayList<>(Arrays.asList("apple", "banana"));
List<String> unmodifiableList = Collections.unmodifiableList(list);

// 尝试修改会抛出 UnsupportedOperationException
unmodifiableList.add("cherry"); // 抛出异常

总结:

Collections 工具类提供了丰富的静态方法,用于对集合进行排序、查找、反转、填充、复制、替换等操作。掌握这些方法可以大大简化集合操作的代码,并提高开发效率。在实际开发中,根据需求选择合适的方法,可以显著提升代码的可读性和性能。

THE END
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容