Java Collections 工具类全解析:高效集合操作的终极指南

在 Java 开发中,Collections 工具类是一个操作集合的强大工具。它提供了各种静态方法,用于对 SetListMap 等集合进行操作,包括添加、排序、查询、复制等功能。本文将全面解析 Collections 工具类的核心方法,并通过代码示例展示其强大之处。


集合框架图(Collection、Map)
在这里插入图片描述

- Vector和ArrayList的区别
    共同点:都是数组实现的
    不同点:
       Vector是线程安全的动态数组,数组初始化长度为 10,默认扩容为 2 倍。
       ArrayList是线程不安全的动态数组,数组初始化长度为 10,默认扩容为 1.5 倍。
    
-HashMap与Hashtable的区别   
    相同点:都是哈希表实现的
    不同点:
       Hashtable是线程安全的,任何非 null 对象都可以用作键或值。
       HashMap是线程不安全的,并允许使用 null 值和 null 键。   

一、Collections 工具类简介

Collections 是一个包含静态方法的工具类,专门用于操作 Collection 类型的集合对象。其主要功能包括:

  • 对集合元素进行排序、查询和修改。
  • 设置集合为不可变。
  • 提供线程安全的集合包装。

常见功能包括:

  • 添加元素
  • 查找元素
  • 排序
  • 反转
  • 复制
  • 替换
  • 线程安全转换

二、核心方法解析

2.1 添加元素

方法

public static <T> boolean addAll(Collection<? super T> c, T... elements)

将所有指定元素添加到指定 Collection 中。

示例代码

List<Object> list = new ArrayList<>();
Collections.addAll(list, "hello", "java", 1, 2, 3);
System.out.println(list); // 输出:[hello, java, 1, 2, 3]

2.2 查找元素

  1. 二分查找 方法
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)

List 中查找某个元素的下标(需排序)。

  1. 最大元素 方法
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)

返回集合中的最大元素。

  1. 统计频率 方法
public static int frequency(Collection<?> c, Object o)

返回指定集合中某元素的出现次数。

示例代码

List<Integer> list = Arrays.asList(1, 2, 3, 3, 4);
System.out.println(Collections.frequency(list, 3)); // 输出:2

2.3 排序和反转

  1. 反转 方法
public static void reverse(List<?> list)

反转列表中元素的顺序。

  1. 排序 方法
  • 根据自然顺序排序:

    public static <T extends Comparable<? super T>> void sort(List<T> list)
    
  • 根据指定比较器排序:

    public static <T> void sort(List<T> list, Comparator<? super T> c)
    
  1. 随机排序 方法
public static void shuffle(List<?> list)

List 集合元素进行随机排序。

示例代码

List<Integer> list = Arrays.asList(1, 2, 3, 4);
Collections.reverse(list);
System.out.println(list); // 输出:[4, 3, 2, 1]

Collections.shuffle(list);
System.out.println(list); // 输出随机顺序

2.4 复制、替换与交换

  1. 复制 方法
public static <T> void copy(List<? super T> dest, List<? extends T> src)

src 的内容复制到 dest,目标列表长度必须大于或等于源列表。

  1. 替换 方法
public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)

使用新值替换 List 中所有旧值。

  1. 交换 方法
public static void swap(List<?> list, int i, int j)

交换指定列表中 ij 位置的元素。

示例代码

List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
Collections.swap(list, 0, 3);
System.out.println(list); // 输出:[4, 2, 3, 1]

2.5 线程安全转换

方法

public static <T> Collection<T> synchronizedCollection(Collection<T> c)
public static <K, V> Map<K, V> synchronizedMap(Map<K, V> m)

将非线程安全集合包装为线程安全集合。

示例代码

List<Integer> list = Collections.synchronizedList(new ArrayList<>());
list.add(1);
list.add(2);
System.out.println(list); // 输出:[1, 2]

三、案例展示

示例一:统计元素频率

List<String> list = Arrays.asList("apple", "banana", "apple", "orange");
System.out.println(Collections.frequency(list, "apple")); // 输出:2

示例二:排序与查找

List<Integer> list = Arrays.asList(4, 2, 5, 1);
Collections.sort(list);
System.out.println(Collections.binarySearch(list, 5)); // 输出:3

示例三:线程安全

Map<String, Integer> map = Collections.synchronizedMap(new HashMap<>());
map.put("A", 1);
map.put("B", 2);
System.out.println(map);

四、总结

Collections 工具类提供了丰富的静态方法,大大简化了对集合的操作。通过熟练掌握 Collections 工具类中的各种方法,可以提升代码质量和开发效率。无论是排序、查找,还是线程安全的集合包装,Collections 工具类都能满足开发中的各种需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中國移动丶移不动

码农

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值