java中的Collections工具类

本文通过一个Java程序演示了如何使用Collections工具类对List容器进行操作,包括随机排列、逆序排列、排序以及二分法查找等实用功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中的Collections工具类

 

类java.util.Collections提供了一些静态方法实现了基于List容器的一些常用算法。

TestCollections.java

import java.util.*;

//Collections类中的方法举例
public class TestCollections {
	public static void main(String[] args){
		List l1 = new LinkedList();
		List l2 = new LinkedList();
		for(int i=0; i<=9; i++){
			l1.add("a"+i);
		}
		//打印l1
		System.out.println(l1);//[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
				
		//对l1进行随机排列
		Collections.shuffle(l1);
		System.out.println(l1);//[a8, a6, a2, a3, a0, a1, a9, a5, a4, a7]
				
		//对l1进行逆序排列
		Collections.reverse(l1);
		System.out.println(l1);//[a7, a4, a5, a9, a1, a0, a3, a2, a6, a8]
		
		//对l1进行排序
		Collections.sort(l1);
		System.out.println(l1);//[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
		
		//二分法查找l1中“a5”的位置
		System.out.println(Collections.binarySearch(l1,"a5"));//5
		
		
		
		
		
		
		
	}
}

 

F:\java>javac TestCollections.java
注: TestCollections.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

F:\java>java TestCollections
[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
[a8, a6, a2, a3, a0, a1, a9, a5, a4, a7]
[a7, a4, a5, a9, a1, a0, a3, a2, a6, a8]
[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
5

F:\java>

 

### Java `Collections` 工具类概述 `java.util.Collections` 是 Java 标准库中的一个重要工具类,封装了大量的静态方法来操作集合对象[^1]。该工具类能够处理多种集合类型,如 List、Set 等,并提供了高效的集合操作方式。 #### 主要功能介绍 #### 排序 对于实现了 `List` 接口的集合,可以通过调用 `sort()` 方法来进行排序。此方法支持自然排序(即按照元素自身的比较逻辑)和定制化排序(通过传入自定义 Comparator)。下面展示了一个简单的例子: ```java import java.util.*; public class SortExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(7, 2, 9, 4); // 自然排序 Collections.sort(numbers); System.out.println("Sorted list (natural order): " + numbers); // 定制排序 Collections.sort(numbers, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return -(o1.compareTo(o2)); // 反向排序 } }); System.out.println("Reverse sorted list: " + numbers); } } ``` #### 查找最大/最小值 为了方便开发者快速获取集合内的极值项,`Collections` 提供了 `max()` 和 `min()` 方法。这两个函数接受一个 Collection 参数并返回相应的极大或极小值。 ```java // 获取最大值 Integer maxValue = Collections.max(listOfNumbers); System.out.println("Max value is: " + maxValue); // 获取最小值 Integer minValue = Collections.min(listOfIntegers); System.out.println("Min value is: " + minValue); ``` #### 批量添加与替换 当需要一次性向现有集合中增加多个新成员时,可利用 `addAll(Collection<? super T> c, T... elements)` 来完成这一任务;而对于想要更新整个集合内特定位置上的数据,则有专门设计好的 `replaceAll(List<T>, oldVal, newVal)` 函数可供选用。 ```java ArrayList<String> stringList = new ArrayList<>(Arrays.asList("a", "b")); boolean success = Collections.addAll(stringList, "c", "d"); if(success){ System.out.println("Added all successfully."); } stringList.replaceAll(s -> s.toUpperCase()); System.out.println("After replacing with uppercase letters: "+stringList); ``` #### 集合间复制 如果希望把源集合里的全部条目转移到目标容器里去的话,那么就可以考虑采用 `copy(Dest dest, Src src)` 这样的形式来做深拷贝工作。 ```java List<String> source = Arrays.asList("one", "two", "three"); List<String> destination = new ArrayList<>(source.size()); Collections.copy(destination, source); System.out.println("Copied content from source to destination: " + destination); ``` #### 单一实例及不可变集合创建 有时应用程序可能只需要固定不变的数据结构作为参数传递给其他组件,在这种情况下便能借助于 `singleton()`, `emptyList/Set/Map()`, 或者 `unmodifiable*()` 类的方法构建只读视图。 ```java // 创建单一实例集合 Set<String> singletonSet = Collections.singleton("only one element"); // 构建空集合 List<Object> emptyList = Collections.emptyList(); Set<?> emptySet = Collections.emptySet(); // 转换成不可修改版本 List<String> readOnlyList = Collections.unmodifiableList(new LinkedList<>()); ``` #### 同步控制 考虑到多线程环境下并发访问共享资源的安全隐患问题,`Collections` 特意准备了几种同步化的包装器模式——比如 `synchronizedCollection()`, `synchronizedList()`, `synchronizedSet()`, `synchronizedMap()` ——使得原本不具备此类特性的基础类型也能被安全地应用于高竞争度场景之中。 ```java List<String> threadSafeList = Collections.synchronizedList(new ArrayList<>()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值