java.util.Collections使用说明

本文深入探讨了Java集合框架中各种集合的特点与使用方法,包括空集合、单元素集合、只读集合等,并介绍了如何利用Collections类提供的方法进行集合操作如排序、查找与替换等。

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

空集合
Collections.EMPTY_LIST,Collections.emptyList()——返回只读的空LIST 集合
Collections.EMPTY_MAP,Collections.emptyMap()——返回只读的空MAP集合
Collections.EMPTY_SET,Collections.emptySet()返回只读的空SET集合
所谓的空集合指的是没有元素在这些集合中,特别需要主要的是返回的集合都是只读的。以下代码会抛出UnsupportedOperationException异常。
-------------------------------------------------------
public static void main(String[] args) 
{
	List children=Collections.EMPTY_LIST;
        children.add(new HashMap());
}
-------------------------------------------------------
Collections.emptyList(),Collections.emptySet(),Collections.emptyMap()由于支持泛型使用起来会更方便,例如
--------------------------------------------------------------
List<String> s = Collections.emptyList();
---------------------------------------------------------------
单元素集合
Collections中的单元素集合指的是集合只有一个元素而且集合只读。
Collections.singletonList——用来生成只读的单一元素的List
Collections.singletonMap——用来生成只读的单Key和Value组成的Map
Collections.singleton——用来生成只读的单一元素的Set
只读集合
Collections提供了生成几种生成只读集合的方法unmodifiableCollection,unmodifiableList,unmodifiableMap,unmodifiableSet,
unmodifiableSortedMap,unmodifiableSortedSet。这些集合一旦初始化以后就不能修改,任何修改这些集合的方法都会抛出
UnsupportedOperationException异常。
Checked集合(Checked Collections)
Checked集合具有检查插入集合元素类型的特性,例如当我们设定checkedList中元素的类型是String的时候,如果插入起来类型的元素就会抛出
ClassCastExceptions异常,Java5中提供泛型的功能,泛型功能能够在代码编译阶段就约束集合中元素的类型,但有些时候声明的集合可能是raw集合,
编译阶段的类型约束就不起作用了,这个时候Checked集合就能起到约束集合中元素类型的作用。
Collections中提供了以下生成Checked集合的方法
checkedCollection,checkedList,checkedMap,checkedSet,checkedSortedMap,checkedSortedSet
同步集合(Synchronized Collections)
Collections的synchronizedXxxxx系列方法顾名思义会返回同步化集合类(SynchronizedMap,
SynchronizedList等等)。这些集合类内部实现都是通过一个mutex(互斥体)来实现对这些集合操作的同步化。
Enumeration接口
从JDK1.0开始Java就提供了Enumeration接口。Collections中list和enumeration和Enumeration接口相关。
list(Enumeration<T> e) 方法用于有Enumeration接口中产生一个List
——————————————————————————————————————
 public void demonstrateEnumerationToList()  
 {  
    log("===== Demonstrate Collections.list(Enumeration) =====", System.out);  
    final Enumeration properties = System.getProperties().propertyNames();  
    final List propertiesList = Collections.list(properties);  
    log(propertiesList.toString(), System.out);  
 }  
——————————————————————————————————————
enumeration(Collection<T> c) 方法用于基于Collection返回Enumeration。
——————————————————————————————————————
 public void demonstrateCollectionToEnumeration()  
 {  
    log("===== Demonstrate Collections.enumeration(Collection) =====", System.out);  
    final Enumeration books = Collections.enumeration(this.favoriteBooks);  
   while (books.hasMoreElements())  
    {  
       log(books.nextElement().toString(), System.out);  
    }  
——————————————————————————————————————
 }  
查找替换
fill——使用指定元素替换指定列表中的所有元素。
frequency——返回指定 collection 中等于指定对象的元素数。
indexOfSubList—— 返回指定源列表中第一次出现指定目标列表的起始位置,如果没有出现这样的列表,则返回 -1。
lastIndexOfSubList——返回指定源列表中最后一次出现指定目标列表的起始位置,如果没有出现这样的列表,则返回-1。
max—— 根据元素的自然顺序,返回给定 collection 的最大元素。
min——根据元素的自然顺序 返回给定 collection 的最小元素。
replaceAll——使用另一个值替换列表中出现的所有某一指定值。
集合排序
Collections还提供了集中对集合进行排序的方法。
reverse——对List中的元素倒序排列
shuffle——对List中的元素随即排列,这个方法让我想到了Apple的iPod Shuffle
sort——对List中的元素排序
swap——交换List中某两个指定下标位元素在集合中的位置。
rotate——循环移动。循环移动这个方法让人比较难以理解,下面的例子就会让你一下子就理解这个方法的含义。
——————————————————————————————————————
假设 list 包含  [t, a, n, k, s]
在调用 Collections.rotate(list, 1)(或 Collections.rotate(list, -4))之后,list 将包含 [s, t, a, n, k]。
——————————————————————————————————————
其他方法
binarySearch——使用二进制搜索算法来搜索指定列表,以获得指定对象。
addAll——将所有指定元素添加到指定 collection 中。
copy——将所有元素从一个列表复制到另一个列表。
disjoint——如果两个指定 collection 中没有相同的元素,则返回 true。
nCopies——返回由指定对象的 n 个副本组成的不可变列表。
<think>嗯,用户想了解java.util.Collections类的使用示例和常用方法。我需要先回顾一下这个类的主要功能。CollectionsJava集合框架中的一个工具类,提供了很多静态方法来操作或返回集合。根据引用内容,用户可能想知道如何初始化集合、获取最大最小值、创建不可变集合等。 首先,用户提到的示例中有unmodifiableMap,这说明不可变集合是一个重点。我需要解释如何用Collections.unmodifiableMap、unmodifiableList等方法创建不可修改的集合,并提醒用户这样做的用途,比如线程安全或者防止误修改。 然后,用户提到了max和min方法,这些是获取集合中最大最小值的常用方法。需要给出示例代码,说明如何使用,并注意集合不能为空,否则会抛出异常。比如引用3和4中的例子,使用List然后调用Collections.max(numbers)。 还有排序和反转,sort方法可以对列表进行自然排序,而reverse则是反转顺序。需要提到这些方法会直接修改原集合,而不是返回新集合。 填充方法fill,可以用指定元素替换列表中的所有元素。比如将列表全部填充为0,但要注意列表不能为空,否则会抛出异常。 同步包装方法,比如synchronizedList,用于将非线程安全的集合转换为线程安全的版本。这在多线程环境下很重要,但需要提醒用户即使这样,迭代时仍需手动同步。 最后,可能需要补充一些其他方法如shuffle打乱顺序,binarySearch进行二分查找,addAll添加多个元素等。同时,需要注意处理可能的异常情况,比如空集合或者null元素。 用户可能的应用场景包括数据安全、多线程处理、集合操作优化等。需要确保示例代码正确,并符合Java语法,比如使用泛型,正确的导入语句等。同时,引用对应的参考资料,比如引用2提到集合的初始化,引用3和4的max/min示例,引用1的不可变映射示例。 总结回答结构:先介绍Collections类的作用,然后分常用方法,每个方法给出示例代码和说明,最后总结应用场景。相关问题部分可以涉及线程安全、性能优化、异常处理等。</think>### Java.util.Collections 使用示例及常用方法介绍 Java的`java.util.Collections`工具类提供了丰富的静态方法,用于操作或返回集合(如`List`、`Set`、`Map`等)。以下是其核心功能及示例: --- #### 一、常用方法及示例 1. **集合初始化与填充** - `Collections.fill()`:将列表所有元素替换为指定值。 ```java List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3)); Collections.fill(list, 0); // 结果:[0, 0, 0][^3] ``` 2. **极值获取** - `Collections.max()`/`Collections.min()`:返回集合的最大/最小值。 ```java List<Integer> numbers = Arrays.asList(1, 3, 5, 7, 9); int max = Collections.max(numbers); // 9[^4] int min = Collections.min(numbers); // 1 ``` 3. **不可变集合** - `Collections.unmodifiableXXX()`:创建不可修改的集合(如`unmodifiableList`、`unmodifiableMap`)。 ```java Map<String, Integer> map = new HashMap<>(); Map<String, Integer> unmodifiableMap = Collections.unmodifiableMap(map); unmodifiableMap.put("key", 1); // 抛出 UnsupportedOperationException[^1] ``` 4. **排序与反转** - `Collections.sort()`:按自然顺序排序列表。 - `Collections.reverse()`:反转列表顺序。 ```java List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 4)); Collections.sort(list); // [1, 3, 4] Collections.reverse(list); // [4, 3, 1] ``` 5. **同步包装** - `Collections.synchronizedXXX()`:将非线程安全集合转换为线程安全版本。 ```java List<Integer> syncList = Collections.synchronizedList(new ArrayList<>()); ``` --- #### 二、应用场景 1. **数据安全**:通过不可变集合保护数据不被意外修改。 2. **多线程环境**:使用同步包装方法实现线程安全[^2]。 3. **算法优化**:快速获取极值、打乱数据顺序(`shuffle()`)等[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值