【Java Collections工具类常用方法实现】简单理解


Collections 类是 Java 提供的一个操作 Set、List 和 Map 等集合的工具类。Collections 类提供了许多操作集合的静态方法,借助这些静态方法可以实现集合元素的排序、查找替换和复制等操作,下面介绍 Collections 类中操作集合的常用方法

1.排序操作

排序操作(主要针对List接口相关)

reverse(List list):反转指定List集合中元素的顺序
shuffle(List list):对List中的元素进行随机排序(洗牌)
sort(List list):对List里的元素根据自然升序排序
sort(List list, Comparator c):自定义比较器进行排序
swap(List list, int i, int j):将指定List集合中i处元素和j出元素进行交换
rotate(List list, int distance):将所有元素向右移位指定长度,如果distance等于size那么结果不变

例子:以sort(List list, Comparator c):自定义比较器进行排序为例

public class CollectionTest {
    public static void main(String[] args) {
       List<Integer> list = new ArrayList<>();
       list.add(4);
       list.add(5);
       list.add(1);

       //自定义比较器
        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return -(o1-o2);
            }
        });
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
        //内比较器
        Collections.sort(list);
        
        System.out.println(list);
    }
}

运行结果:
在这里插入图片描述

2.查找和替换

查找和替换(主要针对Collection接口相关)

binarySearch(List list, Object key):使用二分搜索法,以获得指定对象在List中的索引,前提是集合已经排序
max(Collection coll):返回最大元素
max(Collection coll, Comparator comp):根据自定义比较器,返回最大元素
min(Collection coll):返回最小元素
min(Collection coll, Comparator comp):根据自定义比较器,返回最小元素
fill(List list, Object obj):使用指定对象填充
frequency(Collection, Object o):返回指定集合中指定对象出现的次数
replaceAll(List list, Object old, Object new):替换

上述方法都比较简单,自己写代码练习就好了

3.同步控制

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

Collection c = Collections.synchronizedCollection(new ArrayList());
List list = Collections.synchronizedList(new ArrayList());
Set s = Collections.synchroniezedSet(new HashSet());
Map m = Collections.synchronizedMap(new HashMap())

对于synchronized锁的学习,大家可以看我的多线程博客,有一节专门针对synchronized进行详解

4.设置不可变集合
Collections有三类方法可返回一个不可变集合:
emptyXxx():返回一个空的不可变的集合对象
singletonXxx():返回一个只包含指定对象的,不可变的集合对象。
unmodifiableXxx():返回指定集合对象的不可变视图

举例1:emptyXxx()

public class CollectionTest {
    public static void main(String[] args) {
        List<Object> list1 = Collections.emptyList();
        list1.add(1);
    }
}

在这里插入图片描述
说明该集合是不可变的的空集合

举例2:singletonXxx()

public class CollectionTest {
    public static void main(String[] args) {
        List<Object> list1 = Collections.singletonList(0);
        //list1.add(1);
        Iterator iterator = list1.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

运行结果和上面一样,说明singletonXxx():返回一个只包含指定对象的,不可变的集合对象

举例3:unmodifiableXxx()

public class CollectionTest {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        list1.add(2);
        list1.add(9);
        list1.add(1);
        List<Integer> list2 = Collections.unmodifiableList(list1);
        //list2.add(100);//抛异常
        System.out.println("list2"+list2);
        list1.add(100);
        System.out.println("list2"+list2);
    }
}

运行结果:
在这里插入图片描述
我们看到unmodifiableXxx():返回指定集合对象的不可变视图,当我们给list2中添加元素会报错,但是我们给list1中添加元素时候,当我们再次打印list2,我们会看到list2也会收到list1的影响,说明list1和list2两个引用指向的是同一个对象,那和:unmodifiableXxx():返回指定集合对象的不可变视图 就是相违背的,因为我们可以间接的通过list1改变list2,所以我们需要一个操作,在上述代码中添加一行代码:

  List<Integer> list2 = Collections.unmodifiableList(list1);
  list1 = null;

就是在我们list2创建出来后,把原来list1置为空

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值