JAVA中的Collections工具类

Collections工具类简介

Collections类位于java.util包中,它提供了一系列静态方法,这些方法可以对各种集合类型进行操作,比如List、Set和Map等。这些方法主要分为以下几类:

  • 排序操作(Sorting)

  • 查找和替换操作(Searching and Replacing)

  • 同步包装器(Synchronization)

  • 不可变集合(Unmodifiable Collections)

  • 其他操作(Miscellaneous)

方法分类及示例

1. 排序操作

以下是一些常用的排序方法:

  • sort(List<T> list): 对List进行自然排序。
  • sort(List<T> list, Comparator<? super T> c): 根据指定的Comparator进行排序。
  • reverse(List<?> list): 反转List中元素的顺序。
  • shuffle(List<?> list): 随机排列List中的元素。
  • rotate(List<?> list, int distance): 根据指定的距离旋转List。 

  • 示例代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsSortExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(3);
        numbers.add(1);
        numbers.add(4);
        numbers.add(1);
        numbers.add(5);
        // 自然排序
        Collections.sort(numbers);
        System.out.println("自然排序后的列表: " + numbers);
        // 反转排序
        Collections.reverse(numbers);
        System.out.println("反转后的列表: " + numbers);
        // 根据自定义比较器排序
        Collections.sort(numbers, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1); // 降序排序
            }
        });
        System.out.println("自定义比较器排序后的列表: " + numbers);
    }
}
2. 查找和替换操作

以下是一些常用的查找和替换方法:

  • binarySearch(List<? extends Comparable<? super T>> list, T key): 使用二分搜索法搜索指定的列表,以获得指定对象的索引。
  • max(Collection<? extends T> coll): 根据自然顺序返回给定集合中的最大元素。
  • min(Collection<? extends T> coll): 根据自然顺序返回给定集合中的最小元素。
  • replaceAll(List<T> list, T oldVal, T newVal): 将列表中所有出现的老值替换为新值。 
  • 示例代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsSearchReplaceExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(3);
        numbers.add(1);
        numbers.add(4);
        numbers.add(1);
        numbers.add(5);
        // 二分查找
        int index = Collections.binarySearch(numbers, 4);
        System.out.println("元素4的索引: " + index);
        // 查找最大值
        Integer max = Collections.max(numbers);
        System.out.println("最大值: " + max);
        // 查找最小值
        Integer min = Collections.min(numbers);
        System.out.println("最小值: " + min);
        // 替换元素
        Collections.replaceAll(numbers, 1, 10);
        System.out.println("替换后的列表: " + numbers);
    }
}
3. 同步包装器

以下是一些常用的同步包装器方法:

  • synchronizedList(List<T> list): 返回指定列表的同步(线程安全)视图。
  • synchronizedSet(Set<T> s): 返回指定集合的同步(线程安全)视图。
  • synchronizedMap(Map<K,V> m): 返回指定映射的同步(线程安全)视图。 
  • 示例代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsSynchronizationExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(3);
        numbers.add(1);
        numbers.add(4);
        // 获取同步列表
        List<Integer> synchronizedNumbers = Collections.synchronizedList(numbers);
        // 在多线程环境中使用同步列表
        // Thread thread1 = new Thread(() -> synchronizedNumbers.add(10));
        // Thread thread2 = new Thread(() -> synchronizedNumbers.add(20));
        // thread1.start();
        // thread2.start();
   
    }
}

在上面的代码中,我们创建了一个非线程安全的ArrayList,并通过Collections.synchronizedList方法获取了一个线程安全的同步列表。在实际的多线程环境中,你应该使用同步包装器来避免并发修改异常。

4. 不可变集合

以下是一些常用的不可变集合方法:

  • unmodifiableList(List<? extends T> list): 返回指定列表的不可修改视图。
  • unmodifiableSet(Set<? extends T> s): 返回指定集合的不可修改视图。
  • unmodifiableMap(Map<? extends K, ? extends V> m): 返回指定映射的不可修改视图。
  •  示例代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsUnmodifiableExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(3);
        numbers.add(1);
        numbers.add(4);
        // 获取不可修改列表
        List<Integer> unmodifiableNumbers = Collections.unmodifiableList(numbers);
        // 尝试修改不可修改列表将会抛出UnsupportedOperationException
        try {
            unmodifiableNumbers.add(10);
        } catch (UnsupportedOperationException e) {
            System.out.println("无法修改不可修改的列表");
        }
    }
}

在上面的代码中,我们通过Collections.unmodifiableList方法创建了一个不可修改的列表视图。任何尝试修改这个列表的操作都会抛出UnsupportedOperationException

5. 其他操作

以下是一些其他有用的方法:

  • fill(List<? super T> list, T obj): 用指定的元素替换指定列表中的所有元素。
  • copy(List<? super T> dest, List<? extends T> src): 将所有元素从一个列表复制到另一个列表。
  • disjoint(Collection<?> c1, Collection<?> c2): 如果两个集合没有共同的元素,则返回true。 
  • 示例代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsMiscellaneousExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(3);
        numbers.add(1);
        numbers.add(4);
        List<Integer> emptyList = new ArrayList<>();
        // 使用fill方法填充列表
        Collections.fill(emptyList, 0);
        System.out.println("填充后的列表: " + emptyList);
        // 使用copy方法复制列表
        List<Integer> copiedList = new ArrayList<>(numbers.size());
        Collections.copy(copiedList, numbers);
        System.out.println("复制后的列表: " + copiedList);
        // 使用disjoint方法检查两个列表是否有交集
        boolean disjoint = Collections.disjoint(numbers, emptyList);
        System.out.println("两个列表是否有交集: " + disjoint);
    }
}

在上面的代码中,我们使用了fill方法来填充一个空列表,copy方法来复制一个列表,以及disjoint方法来检查两个列表是否有交集。

总结

Collections工具类提供了大量的静态方法来操作集合,这些方法在处理集合时非常有用,尤其是在需要对集合进行排序、查找、替换、同步或创建不可变视图时。通过上面的示例,我们可以看到如何使用这些方法来简化集合操作,并确保代码的清晰和高效。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值