java
Map<Integer, Integer> hashMap = new HashMap<>();
for (int num : nums) {
hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
}
逐行详细解释:
-
Map<Integer, Integer> hashMap = new HashMap<>();
- 创建一个HashMap对象,用来存储键值对(key-value pairs)
- 第一个
Integer
是键的类型(这里存储数组中的数字) - 第二个
Integer
是值的类型(这里存储每个数字出现的次数) HashMap<>
中的<>
表示使用泛型,可以确保类型安全
-
for (int num : nums)
- 增强型for循环,遍历数组
nums
中的每一个元素 - 每次循环,当前元素的值会被赋给变量
num
- 增强型for循环,遍历数组
-
hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
- 这是最核心的部分,完成统计功能
- 拆解来看:
hashMap.getOrDefault(num, 0)
- 尝试从hashMap中获取键为
num
的值(即该数字已出现的次数) - 如果
num
不存在于map中,则返回默认值0
- 尝试从hashMap中获取键为
... + 1
- 将获取到的值(已出现次数)加1
hashMap.put(num, ...)
- 将
num
作为键,更新后的计数值作为值存入map中 - 如果键已存在,会覆盖旧值;如果不存在,会新建一个条目
- 将
完整代码上下文
java
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
arr[i] = entry.getKey(); // 获取键(数组元素)
count[i] = entry.getValue(); // 获取值(出现次数)
i++;
}
逐部分解析
1. frequencyMap.entrySet()
- 作用:返回 Map 中所有键值对的集合(Set 集合)
- 返回值 :是一个
Set<Map.Entry<Integer, Integer>>
类型的集合 - 特点 :
- 每个元素都是一个
Map.Entry
对象 Entry
是 Map 接口的内部接口,表示一个键值对
- 每个元素都是一个
2. Map.Entry<Integer, Integer>
- 含义:表示 Map 中的一个键值对条目
- 泛型参数 :
- 第一个
Integer
:键(key)的类型,这里是你数组中的数字 - 第二个
Integer
:值(value)的类型,这里是该数字出现的次数
- 第一个
- 常用方法 :
getKey()
:获取该条目的键getValue()
:获取该条目的值setValue(V value)
:设置该条目的值
3. for
循环结构
- 类型:增强型 for 循环(foreach 循环)
- 工作方式 :
- 每次循环从
entrySet()
返回的集合中取出一个Entry
对象 - 赋给
entry
变量 - 直到遍历完所有条目
- 每次循环从
4. 类比解释
可以把 frequencyMap
想象成一个字典:
entrySet()
相当于把字典中所有的"词条"(单词+解释)都拿出来- 每个
Entry
对象就是一个词条getKey()
获取单词getValue()
获取解释
- foreach 循环就是依次查看每个词条