从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

    • 反射

    • 注解

    • 集合类

      • 集合介绍
      • List
      • Map
      • Set
      • Queue
      • Stack
      • Collections
        • 创建空集合
        • 排序
        • 洗牌算法
        • 不可变集合
        • 线程安全集合
        • 小结
    • Java
  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • JavaSenior
  • 集合类
2022-12-31
目录

Collections

# 06.Collections

​Collections​是JDK提供的工具类(注意不是Collection,多了个s的),位于java.util​包中,提供了一系列静态方法,能更方便地操作各种集合。

  ‍

‍

‍

‍

# 创建空集合

​Collections​提供了一系列方法来创建空集合:

  • 创建空List:List<T> emptyList()​
  • 创建空Map:Map<K, V> emptyMap()​
  • 创建空Set:Set<T> emptySet()​

要注意到返回的空集合是不可变集合,无法向其中添加或删除元素。

此外,也可以用各个集合接口提供的of(T...)​方法创建空集合。例如,以下创建空List​的两个方法是等价的:

List<String> list1 = List.of();
List<String> list2 = Collections.emptyList();
1
2

‍

# 排序

​Collections​可以对List​进行排序。因为排序会直接修改List​元素的位置,因此必须传入可变List​:

‍

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("pear");
        list.add("orange");
        // 排序前:
        System.out.println(list);
        Collections.sort(list);
        // 排序后:
        System.out.println(list);
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

‍

# 洗牌算法

​Collections​提供了洗牌算法,即传入一个有序的List​,可以随机打乱List​内部元素的顺序,效果相当于让计算机洗牌:

‍

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        for (int i=0; i<10; i++) {
            list.add(i);
        }
        // 洗牌前:
        System.out.println(list);
        Collections.shuffle(list);
        // 洗牌后:
        System.out.println(list);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

‍

‍

# 不可变集合

​Collections​还提供了一组方法把可变集合封装成不可变集合:

  • 封装成不可变List:List<T> unmodifiableList(List<? extends T> list)​
  • 封装成不可变Set:Set<T> unmodifiableSet(Set<? extends T> set)​
  • 封装成不可变Map:Map<K, V> unmodifiableMap(Map<? extends K, ? extends V> m)​

这种封装实际上是通过创建一个代理对象,拦截掉所有修改方法实现的。我们来看看效果:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<String> mutable = new ArrayList<>();
        mutable.add("apple");
        mutable.add("pear");
        // 变为不可变集合:
        List<String> immutable = Collections.unmodifiableList(mutable);
        immutable.add("orange"); // UnsupportedOperationException!
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

‍

‍

# 线程安全集合

​Collections​还提供了一组方法,可以把线程不安全的集合变为线程安全的集合:

  • 变为线程安全的List:List<T> synchronizedList(List<T> list)​
  • 变为线程安全的Set:Set<T> synchronizedSet(Set<T> s)​
  • 变为线程安全的Map:Map<K,V> synchronizedMap(Map<K,V> m)​

多线程的概念我们会在后面讲。因为从Java 5开始,引入了更高效的并发集合类,所以上述这几个同步方法已经没有什么用了。

‍

‍

# 小结

​Collections​类提供了一组工具方法来方便使用集合类:

  • 创建空集合;
  • 创建单元素集合;
  • 创建不可变集合;
  • 排序/洗牌等操作。
在GitHub上编辑此页 (opens new window)
上次更新: 2022/12/31 22:07:34
Stack
Java

← Stack Java→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式