欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java集合工具类Collections

程序员文章站 2022-03-09 20:21:02
...

集合工具类

Java提供一个操作Set, List和Map等集合的工具类:Collections。
提供大量方法对集合进行排序,查询,修改等操作。
实现集合对象的线程安全。

排序

Collections 提供下面方法对List进行排序。

  • reverse():反转List顺序
  • shuffle():随机排序
  • sort():自然排序,可以指定Comparator排序
  • swap(): 元素交换
  • rotate(): distance正数时, 后面元素移到前面, 负数时,前distance个元素移到后面。
    使用例子
        ArrayList nums = new ArrayList();
        nums.add(2);
        nums.add(-4);
        nums.add(8);
        nums.add(0);
        System.out.println(nums);
        
        Collections.reverse(nums);
        System.out.println(nums);
        
        Collections.sort(nums);
        System.out.println(nums);
        
        Collections.shuffle(nums);
        System.out.println(nums);
//Output
[2, -4, 8, 0]
[0, 8, -4, 2]
[-4, 0, 2, 8]
[0, 2, -4, 8]

查找、替换

主要提供下面方法用于查找,替换。

  • binarySearch(): 使用二分查找搜索指定 List集合,要先保证List中元素已处于有序状态。
  • max():返回最大值, 自然排序或指定Comparator排序
  • min(): 返回最小值, 自然排序或指定Comparator排序
  • fill(): 指定元素替换List中所有元素
  • frequency():元素出现次数
  • indexOfSubList(): 子List第一次出现的位置
  • lastIndexOfSubList(): 子List最后一次出现的位置
  • replaceAll():使用一个新值替换List旧值
        ArrayList nums = new ArrayList();
        nums.add(2);
        nums.add(-4);
        nums.add(8);
        nums.add(0);
        System.out.println(nums);
        
        System.out.println(Collections.max(nums));
        System.out.println(Collections.min(nums));
        
        Collections.replaceAll(nums, 2, 3);
        System.out.println(nums);

        System.out.println(Collections.frequency(nums, 3));
        
        Collections.sort(nums);
        System.out.println(nums);
        System.out.println(Collections.binarySearch(nums, 8));
//Output
[2, -4, 8, 0]
8
-4
[3, -4, 8, 0]
1
[-4, 0, 3, 8]
3

同步控制

Java中常用的集合实现类, HashSet,TreeSet, ArrayList, ArrayDeque, LinkedList, HashMap, TreeMap都是线程不安全的。
如果有多个线程访问,超过一个线程试图修改,则存在线程安全问题。
Collections提供了多个 synchronizedXxx()方法, 将指定集合包装成线程同步的集合。

        Collection collection = Collections.synchronizedCollection(new ArrayList<>());
        List list = Collections.synchronizedList(new ArrayList<>());
        Set set = Collections.synchronizedSet(new HashSet<>());
        Map map = Collections.synchronizedMap(new HashMap<>());

不可变集合

Collections提供了不可变集合。
集合是"只读", 不能修改。
主要下面方法:

  • emptyXxx(): 返回一个空的, 不可变集合
  • singletonXxx(): 返回一个指定元素的不可变集合,
  • unmodifiableXxx(): 返回指定集合的不可变视图。
        List emptyList = Collections.emptyList();
        Set ummodifySet = Collections.singleton("A");
        Map score = new HashMap();
        score.put("A", 100);
        score.put("B", 90);
        Map unmodifyMap = Collections.unmodifiableMap(score);
        unmodifyMap.put("C", 30);
//Output
java.lang.UnsupportedOperationException

当试图修改时,抛出UnsupportedOperationException 异常。

地址: https://blog.csdn.net/yonggang7/article/details/86770719