操作集合的工具类:Collections类

发布时间:2025-12-10 11:22:56 浏览次数:5

目录

  • 排序操作
  • 查找、替换操作
  • 同步控制
  • 设置不可变集合

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

排序操作

Collections提供了如下的常用的类方法用于对List集合元素排序

  • void reverse(List list):反转指定List集合中元素排序。
  • void shuffle(List list):对List集合元素进行随机排序(模拟了洗牌动作)
  • void sort(List list):根据元素的自然排序,对list中的元素进行升序排序。
  • void sort(List list,Comparator c):根据指定的Comparator对象产生的顺序,进行排序。
  • void swap(List list ,int i , int j):交换list中i和j位置的元素。
  • void rotate(List list , int distance):当distance为正数的时候,将list后distance整体移到前面,当distance为负数的时候,则将前 |distance| 个元素,移到后面。
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class App {public static void main(String[] args) throws Exception {List list = new ArrayList<>();list.add(1);list.add(9);list.add(7);list.add(4);System.out.println(list);Collections.reverse(list);System.out.println(list);Collections.sort(list);System.out.println(list);Collections.shuffle(list);System.out.println(list);}}

输出结果如下:

[1, 9, 7, 4][4, 7, 9, 1][1, 4, 7, 9][7, 1, 9, 4]

查找、替换操作

Collections还提供了如下常用的用于查找、替换集合元素的类方法

  • int binarySearch(List list,Object key):使用二分搜索方法搜索指定的List集合,以获得指定对象在List集合中的中的元素已经处于有序状态。
  • Object max(Collection coll):根据元素的自然排序,返回最大的元素
  • Object max(Collection coll ,Comparator comp):根据comp指定的排序规则,返回coll当中的指定元素
  • Object min(Collection coll ): 根据元素的自然排序返回集合中的最小值
  • Object min(Collection coll ,Comparator comp):根据comp定制的规则返回指定集合中的最小值。
  • void fill(List list ,Object object):使用object替换掉List当中的所有元素。
  • int frequency(Collection coll,Comparator comp):返回指定元素在coll当中出现的次数
  • int lastIndexOfSubList(List source,List target):返回子List对象在目标对象当中出现的最后一个位置;如果不存在的话返回-1.
  • int indexOfSubList(List source,List target):返回子List对象在目标对象当中出现的第一个位置;如果不存在的话返回-1。
  • boolean replaceAll(List list ,Object oldVal,Object newVal):使用一个新值newVal替换List对象的所有旧值oldVal。
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class App {public static void main(String[] args) throws Exception {List list = new ArrayList<>();list.add(1);list.add(9);list.add(7);list.add(4);System.out.println(list);System.out.println(Collections.max(list));System.out.println(Collections.min(list));Collections.replaceAll(list, 1, 6);System.out.println(list);System.out.println(Collections.frequency(list, 7));Collections.sort(list);System.out.println(list);System.out.println(Collections.binarySearch(list, 7));}}

输出结果如下:

[6, 9, 7, 4]1[4, 6, 7, 9]2

同步控制

Collections 类中提供了多个synchronizedXxx()方法,该方法可以将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。

Java中常用的集合框架中实现类HashSet、TreeSet、ArrayLIst、ArrayDeque、LinkedList、HashMap和TreeMap都是线程不安全的,如果有多个线程访问他们,而且有超过一个的线程试图修改它们,则存在线程安全的问题。Colelctions提供了多个类方法可以把它们包装成线程同步的集合。

下面的代码示例程序创建了4个线程安全的集合对象。

import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;public class App {public static void main(String[] args) throws Exception {List c = Collections.synchronizedList(new ArrayList());Set s = Collections.synchronizedSet(new HashSet());Map m =Collections.synchronizedMap(new HashMap());Collection c1 =Collections.synchronizedCollection(new ArrayList());}}

在上面的程序当中,直接将新创建的集合对象传给了Collections的synchronizedXxxx方法,这样就可以直接获取List、Set和Map的线程安全实现版本。

设置不可变集合

Collections 提供了如下三类方法来返回一个不可变集合:

  • emptyXxx():返回一个空的、不可变的集合对象,此处的集合既可以时List,也可以是SortedSet、Set,还可以是Map、SortedMap等。
  • singletonXxx():返回一个只包含指定对象(只有一个或者一项元素)的、不可变的集合对象,此处的集合既可以是List,还可以是Map。
  • unmodifiableXxx():返回指定集合对象的的不可变视图,此处的集合即可以是List,也可以是Set、SortedSet,还可以是Map、SortedMap等。

上面的三类方法参数是原有的集合都西昂,返回值是该集合的“只读”版本。通过Collections提供的三类方法,可以生成“只读”的Collection或Map。

import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;public class App {public static void main(String[] args) throws Exception {List<Object> unmodifiableList = Collections.emptyList();Set<String> unmodifiableSet = Collections.singleton("TEST");HashMap hashMap= new HashMap();hashMap.put("语文", 33);hashMap.put("math", 63);Map unmodifiableMap = Collections.unmodifiableMap(hashMap);//如下代码将会引发异常//unmodifiableMap.add();}}
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477