Collection和Collections区别

本文深入探讨了Java集合框架中的Collection接口及其具体实现,包括如何对List集合元素进行排序、查找和替换,以及如何使用Collections类进行同步控制以确保多线程环境下集合的安全访问。同时介绍了如何创建不可变集合,确保集合对象只能被访问而不能被修改。

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

java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

对List集合元素进行排序:

1、static void reverse(List list):反转指定List集合中元素的顺序。

2、static void shuffle(List list):对List中的元素进行随机排序(类似于洗牌的动作)。

3.static void sort(List list):根据元素的自然顺序对指定的List 里的元素按升序排序。

4、static void sort(List list,Comparator c):根据指定Comparator产生的顺序对List集合的元素进行排序。

5、static void swap(List list,int i,int j):将指定List集合中i处元素和j出元素进行交换。

6、static void rotate(List list,int distance):将指定集合中i处元素和list.length-1-i处的元素进行交换。

 

查找和替换的方法:

1、static int binarySearch(List list,Object key):使用二分搜索法,以获得指定对象在List中的索引,前提是集合元素已是有序状态。

2、static Object max(Collection coll):根据元素的自然排序,返回给定集合中的最大元素。

3、static Object max(Collection coll,Comparator comp):根据指定Comparator产生的顺序,返回给定集合中的最大元素。

4、static Object min(Collection coll):根据元素的自然排序,返回给定集合中的最小元素。

5、static Object min(Collection coll,Comparator comp):根据指定Comparator产生的顺序,返回给定集合中的最小元素。

6、static void fill(List list,Object obj):使用指定元素obj替换List里的所有元素。

7、static int frequency(Collection Object o):返回指定集合中等于指定对象的元素数量。

8、static int indexOfSubList(List source,List target):返回子list对象在母list中第一次出现的索引,如果没有则返回-1。

9、static int lastIndexOfSubList(List source,List target):返回子list对象在母list中最后一次出现的索引,如果没有则返回-1。

10、static boolean replaceAll(List list,Object old,Object new):使用一个新值替换List中所有的旧值。

 

同步控制:

Collection类中提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象,从而解决多线程并发访问集合时线程的安全问题。java中常用的HashSet、ArrayList、HashMap都是线程不安全的,如果多条线程访问他们,而且多于一条的线程试图修改它们,则可能出错。以下方法直接将新建的集合传给了Collections的synchronizedXxx方法,这样就直接获取它们的线程安全实现版本。

public static void main(String[] args) {
  Collection c=Collections.synchronizedCollection(new ArrayList());
  List l=Collections.synchronizedList(new ArrayList());
  Set s=Collections.synchronizedSet(new HashSet());
  Map m=Collections.synchronizedMap(new HashMap());
}

 

设置不可变集合:不可变集合对象只能访问不能修改

Collections有三类方法可返回一个不可变集合:

1、emptyXxx():返回一个空的不可变的集合对象

2、singletonXxx():返回一个只包含指定对象的,不可变的集合对象。

3、unmodifiableXxx():返回指定集合对象的不可变视图

public static void main(String[] args) {
     //创建一个空的,不可变的List对象
     List unmodList =Collections.emptyList();
     //创建一个只有一个元素且不可变的set对象
     Set unmodSet =Collections.singleton("唯一的");
     Map a=new HashMap();
     a.put("语文", 80);
     a.put("java", 90);
     //返回map对象对应的不可变版本
     Map unmodMap =Collections.unmodifiableMap(a);
     //以下代码都将引发UnsupportedOperationException异常
     unmodList.add("hello");
     unmodSet.add("kitty");
     unmodMap.put("语文", 70) 
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值