【Java实战】滑动窗口(思维训练)+Map方法拓展(一行从理解到掌握)5.23

Part 1

将 List 转为 Integer 数组

nums.toArray(Integer[]::new)

具体逻辑:
List.toArray() 方法的作用
功能:
将 List 集合转换为数组。

参数:

  • 可传入一个指定类型的空数组,用于确定返回数组的类型和长度。
  • 若传入的数组长度 足够容纳列表元素,则直接填充元素并返回该数组;
  • 若长度不足,会创建一个 新的同类型数组(长度为列表实际元素个数),填充后返回。

Integer[]::new 的含义

  • 构造方法引用: Integer[]::new 是 Java 8 引入的 方法引用 语法,等价于创建一个 Integer 数组的构造器。
  • 示例:若 nums 有 5 个元素, toArray(Integer[]::new) 会返回长度为 5 的 Integer[] 。

思考:
为什么不用原始类型数组?

  • 泛型限制:Java 泛型不支持基本类型(如 int[] ), List 只能转为包装类型数组( Integer[] )。

等价的传统写法(无方法引用)

Integer[] a = new Integer[nums.size()]; 
 // 先创建同长度空数组
 nums.toArray(a); 
 // 填充元素,返回的 a 即为目标数组 
  • toArray(Integer[]::new) 是上述逻辑的 简化写法,更简洁高效。

总结:
这行代码的核心是利用 toArray 方法的参数特性,通过构造方法引用直接生成 Integer 数组,避免手动创建数组和类型转换的繁琐步骤,同时提升后续元素访问的效率。

merge与传统put

方法原型:

default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)

代码示例:

cnt.merge(a[i], 1, Integer::sum); // 统计次数:存在则加 1,不存在则初始化为 1

参数说明:

  1. a[i] - 这是要统计的键(key),也就是你要计数的元素
  2. 1 - 这是如果键不存在时要关联的初始值
  3. Integer::sum - 这是一个合并函数(lambda表达式),当键已存在时,会用这个函数计算新值

工作原理:

  1. 如果 a[i] 这个键不存在cnt 中:

    • 会直接插入这个键,并将值设为 1(第二个参数)
  2. 如果 a[i] 这个键已经存在

    • 会取出旧值(oldValue)和给定的 1(第二个参数)
    • 使用 Integer::sum 函数计算新值(即 oldValue + 1
    • 用新值更新这个键值对

等价于:

// 传统写法
if (cnt.containsKey(a[i])) {
   
   
    cnt.put(a[i], cnt.get(a[i]) + 1);
} else {
   
   
    cnt.put(a[i], 1<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值