js-20

一、Collections 工具类

1. 核心定位

java.util.Collections 是一个集合工具类,而非集合本身,它提供了一系列静态方法,用于对集合进行操作和处理。

2. 常用 API

表格

方法名 说明
public static <T> boolean addAll(Collection<T> c, T... elements) 批量添加元素到集合中
public static void shuffle(List<?> list) 打乱 List 集合中元素的顺序
public static <T> void sort(List<T> list) 根据自然排序对 List 进行排序
public static <T> void sort(List<T> list, Comparator<T> c) 根据指定比较器对 List 进行排序
public static <T> int binarySearch(List<T> list, T key) 在有序 List 中以二分查找法查找元素
public static <T> void copy(List<T> dest, List<T> src) 将源集合元素拷贝到目标集合
public static <T> int fill(List<T> list, T obj) 使用指定元素填充整个集合
public static <T> T max/min(Collection<T> coll) 根据自然排序获取集合中的最大 / 最小值
public static <T> void swap(List<?> list, int i, int j) 交换集合中指定索引位置的两个元素

二、可变参数

1. 核心特性

  • 本质:可变参数本质上就是一个数组。
  • 作用:在方法形参中接收同类型的多个数据,使方法调用更灵活。
  • 格式数据类型... 参数名,例如 int... a

2. 注意事项

  • 一个方法的形参列表中,可变参数只能有一个
  • 可变参数必须放在形参列表的最后面

三、不可变集合

1. 核心定义

不可变集合是指创建后不能被修改的集合,即不能进行添加、删除或修改元素的操作。

2. 创建方式

ListSetMap 接口中,都提供了静态的 of() 方法,用于创建不可变集合:

表格

方法名 说明
static <E> List<E> of(E... elements) 创建一个包含指定元素的不可变 List 集合
static <E> Set<E> of(E... elements) 创建一个包含指定元素的不可变 Set 集合
static <K, V> Map<K, V> of(K k1, V v1, ...) 创建一个包含指定键值对的不可变 Map 集合

3. 注意事项

  • 创建后的集合不能添加、删除或修改任何元素。
  • 当创建不可变 SetMap 集合时,传入的参数(键)必须保证唯一性,否则会抛出异常。

四、创建不可变 Map 的两种方式

1. 传统方式:Map.ofEntries()

java

运行

复制代码
Map<Object, Object> map = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));
  • 原理
    1. 先通过 hm.entrySet() 获取原 Map 的所有键值对(Entry 对象)。
    2. 调用 toArray(new Map.Entry[0])Set<Entry> 转换为 Entry 数组。
    3. 最后使用 Map.ofEntries() 方法,将数组中的所有 Entry 转换为一个新的不可变 Map。

2. 简化方式:Map.copyOf()(Java 10+)

java

运行

复制代码
Map<String, String> map = Map.copyOf(hm);
  • 原理 :这是一个更简洁的静态方法,它直接接收一个现有的 Map hm,并返回一个包含其所有键值对的不可变副本。

五、创建不可变 Map 的关键细节

  1. 键的唯一性 :不可变 Map 的键(Key)不能重复,必须保证唯一性,否则创建时会抛出 IllegalArgumentException 异常。
  2. Map.of() 的参数限制 :直接使用 Map.of() 方法创建不可变 Map 时,参数个数有上限,最多只能传递 20 个参数(即 10 个键值对) 。当键值对数量超过 10 个时,应使用 Map.ofEntries()Map.copyOf() 方法。

六、toArray() 方法的底层原理

toArray() 方法在将集合转换为数组时,会根据集合长度和传入数组的长度进行智能判断:

  • 场景一:集合长度 > 数组长度
    • 数据在传入的数组中放不下,此时方法会根据集合的实际大小,重新创建一个新的数组来存放数据。
  • 场景二:集合长度 ≤ 数组长度
    • 数据在传入的数组中放得下,此时方法不会创建新数组,而是直接使用传入的数组来存放数据,从而节省内存开销。
相关推荐
悟空瞎说9 分钟前
生产环境Node.js内存泄漏,定位+根治全流程(图文版)
javascript·node.js
是大强11 分钟前
Electron 打包用 junction 代替 symlink
前端·javascript·electron
卷Java19 分钟前
Python字典:键值对、get()方法、defaultdict,附通讯录实战
开发语言·数据库·python
liuyao_xianhui19 分钟前
优选算法_翻转链表_头插法_C++
开发语言·数据结构·c++·算法·leetcode·链表·动态规划
happy_baymax22 分钟前
三电平矢量表达式MATLAB实现
开发语言·matlab
xyq202423 分钟前
jEasyUI 创建 XP 风格左侧面板
开发语言
赫瑞24 分钟前
Java中的最长公共子序列——LCS
java·开发语言
哈__25 分钟前
ReactNative项目OpenHarmony三方库集成实战:lottie-react-native
javascript·react native·react.js
于先生吖27 分钟前
零基础开发国际版同城出行平台 JAVA 顺风车预约系统实战教学
java·开发语言
代码雕刻家28 分钟前
2.22.StringBuffer类的常见用法、
java·开发语言