一 Collections介绍
1 Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作。
2 Collections还提供了将集合对象设置不可变、对集合对象实现同步控制等方法。
二 排序操作
1 代码示例
import java.util.*; public class SortTest { public static void main(String[] args) { ArrayList nums = new ArrayList(); nums.add(2); nums.add(-5); nums.add(3); nums.add(10); System.out.println(nums); // 输出:[2, -5, 3, 10] Collections.reverse(nums); // 将List集合元素的次序反转 System.out.println(nums); // 输出:[10, 3, -5, 2] Collections.sort(nums); // 将List集合元素的按自然顺序排序 System.out.println(nums); // 输出:[-5, 2, 3,10] Collections.shuffle(nums); // 将List集合元素的按随机顺序排序 System.out.println(nums); // 每次输出的次序不固定 } }
2 运行结果
[2, -5, 3, 10]
[10, 3, -5, 2]
[-5, 2, 3, 10]
[-5, 10, 3, 2]
3 代码说明
上面代码演示了Collections类常用的排序操作。
三 查找和替换操作
1 代码示例
import java.util.*; public class SearchTest { public static void main(String[] args) { ArrayList nums = new ArrayList(); nums.add(2); nums.add(-5); nums.add(3); nums.add(10); System.out.println(nums); // 输出:[2, -5, 3, 10] System.out.println(Collections.max(nums)); // 输出最大元素,将输出13 System.out.println(Collections.min(nums)); // 输出最小元素,将输出-5 Collections.replaceAll(nums , 10 , 1); // 将nums中的0使用1来代替 System.out.println(nums); // 输出:[2, -5, 3, 1] // 判断-5在List集合中出现的次数,返回1 System.out.println(Collections.frequency(nums , -5)); Collections.sort(nums); // 对nums集合排序 System.out.println(nums); // 输出:[-5, 1,2, 3] //只有排序后的List集合才可用二分法查询,输出3 System.out.println(Collections.binarySearch(nums , 3)); } }
2 运行结果
[2, -5, 3, 10]
10
-5
[2, -5, 3, 1]
1
[-5, 1, 2, 3]
3
3 代码说明
上面代码演示了Collections工具类的查找和替换操作。
四 同步操作
1 代码示例
import java.util.*; public class SynchronizedTest { public static void main(String[] args) { // 下面程序创建了四个线程安全的集合对象 Collection c = Collections.synchronizedCollection(new ArrayList()); List list = Collections.synchronizedList(new ArrayList()); Set s = Collections.synchronizedSet(new HashSet()); Map m = Collections.synchronizedMap(new HashMap()); } }
2 代码说明
在上面代码中,直接将新创建的集合对象传给了Collections的synchronizedXxx方法,这样就可以直接获取List,Set,Map的线程安全版本。
五设置不可变集合
1 代码示例
import java.util.*; public class UnmodifiableTest { public static void main(String[] args) { // 创建一个空的、不可改变的List对象 List unmodifiableList = Collections.emptyList(); // 创建一个只有一个元素,且不可改变的Set对象 Set unmodifiableSet = Collections.singleton("疯狂Java讲义"); // 创建一个普通Map对象 Map scores = new HashMap(); scores.put("语文" , 80); scores.put("Java" , 82); // 返回普通Map对象对应的不可变版本 Map unmodifiableMap = Collections.unmodifiableMap(scores); // 下面任意一行代码都将引发UnsupportedOperationException异常 unmodifiableList.add("测试元素"); //① unmodifiableSet.add("测试元素"); //② unmodifiableMap.put("语文" , 90); //③ } }
2 运行结果
E:\test\Java\Java8\Collections\src>java UnmodifiableTest
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at UnmodifiableTest.main(UnmodifiableTest.java:20)
3 代码说明
最后3行代码试图修改集合元素,都会引发UnsupportedOperationException异常。