操作集合的工具类Collections

版权声明:本文为博主原创文章,可以随意转载,需注明出处。 https://blog.csdn.net/qq_32371887/article/details/73648389

  Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了将集合对象设置为不可变,对集合对象实现同步控制等方法。
  

  • 排序操作
    Collections提供了如下几个方法用于对List集合元素进行排序。
// 当参数为正数时,将list集合的后参数个元素“整体”移动到前面,当参数为负数时,将list集合的前参数个元素“整体”移动到后面
Collections.rotate(list, 2);
// 反转指定列表中元素的顺序。
Collections.reverse(list);
// 对List集合元素进行随机排序。
Collections.shuffle(list);
// 根据元素的自然顺序对指定list集合的元素按升序进行排序
Collections.sort(list);
// 根据指定Comperator产生的顺序对List集合元素进行排序。
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        if (o1.compareTo(o2) > 0) return -1;
        return 0;
    }
});
// 将指定List集合中的i处元素和j处元素进行交换。
Collections.swap(list, 0, 7);
// 当参数为正数时,将list集合的后参数个元素“整体”移动到前面,当参数为负数时,将list集合的前参数个元素“整体”移动到后面
Collections.rotate(list, 2);
  • 查找、替换操作
    Collections还提供了如下用于查找、替换集合元素的常用方法。
//使用一个新值"9"替换List对象的所有旧值"5"。
Collections.replaceAll(list,"5","9");
// 返回指定集合中指定元素的出现次数。
Collections.frequency(list,"9");
// 根据Comparator指定的顺序,返回给集合中的最小元素。
Collections.min(list, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        if(o1.compareTo(o2) > 0) return -1;
        return 0;
    }
});
// 根据元素的自然顺序,返回给集合中的最小元素。
Collections.min(list);
// 根据Comparator指定的顺序,返回给集合中的最大的元素。
Collections.max(list, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        if(o1.compareTo(o2) > 0) return -1;
        return 0;
    }
});
// 根据元素的自然顺序,返回给定集合中的最大元素。
Collections.max(list);
// 使用二分法搜索指定的List集合,用来获得指定对象key在List集合中的索引。list必须有序
Collections.binarySearch(list,"3");
// 使用指定元素obj替换指定List集合中的所有元素。
Collections.fill(list,"9");
  • 同步控制
      Collections类中提供了多个synchronizedXxx()方法,该方法可以将指定的集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的多线程安全问题。
      Java中常用的集合框架中的实现类,HashSet、TreeSet、ArrayList、ArrayDeque、LinkedList、HashMap、和TreeMap都是线程不安全的。如果有多个线程访问它们,而且有超过一个的线程试图修改它们,则可能会出现错误。Collections提供了多个静态方法可以把它们包装成线程同步的集合。
Collection<String> collection = Collections.synchronizedCollection(new ArrayList<String>());
List<String> list = Collections.synchronizedList(new ArrayList<String>());
Set<String> set = Collections.synchronizedSet(new HashSet<String>());
Map<String,String> map = Collections.synchronizedMap(new HashMap<String,String>());

通过synchronizedXxx()方法,就可以直接获取List、Set、Map的线程安全实现版本。

  • 设置不可变集合
    Collections提供如下三个类方法来返回一个不可变的集合。
    1.emptyXxx():返回一个空的,不可变的结合对象,此处的集合即可以是List,也可以是Set,还可以是Map。
    2.singletonXxx():返回一个包含指定对象的,不可变的集合对象,此处的集合即可以是List,也可以是Set,还可以是Map。
    3.unmodifiableXxx():返回指定集合对象的不可变视图,此处的集合既可以是List,也可以是Set,还可以是Map。
public static void test5(){
    //创建一个空的,不可变的Set对象
    Set set = Collections.emptySet();
    //创建一个只包含特定对象的List集合
    List<String> list = Collections.singletonList("abc");
    //创建一个普通的Map集合,将Map集合转变为一个不能在更改的Map对象
    Map map = new HashMap();
    map.put("123", "abc");
    map.put("456", "def");
    Map unmodifiableMap =Collections.unmodifiableMap(map);
}

源代码:
https://github.com/wolf521/demo/tree/master/src/main/java/com/example/demo/collection

猜你喜欢

转载自blog.csdn.net/qq_32371887/article/details/73648389