解析一下getOrDefault()方法
时间: 2024-02-22 11:25:51 浏览: 33
getOrDefault()方法是Map接口中的一个默认方法,用于获取指定键对应的值,如果该键不存在,则返回一个默认值。其方法签名为:
```
default V getOrDefault(Object key, V defaultValue)
```
其中,key表示要获取的键,defaultValue表示当key不存在时的默认值。
如果该键存在于映射中,则返回该键对应的值;否则,返回默认值defaultValue。
举个例子,假设有一个Map对象scores,存储了学生成绩,其中键为学生姓名,值为对应的成绩。若要获取某个学生的成绩,可以使用getOrDefault()方法,若该学生不存在,则返回默认值0:
```
Map<String, Integer> scores = new HashMap<>();
scores.put("Tom", 80);
scores.put("Jerry", 90);
int score1 = scores.getOrDefault("Tom", 0); // score1 = 80
int score2 = scores.getOrDefault("Bob", 0); // score2 = 0
```
相关问题
public int[] topKFrequent(int[] nums, int k) { Map<Integer, Integer> occurrences = new HashMap<Integer, Integer>(); for (int num : nums) { occurrences.put(num, occurrences.getOrDefault(num, 0) + 1); } // int[] 的第一个元素代表数组的值,第二个元素代表了该值出现的次数 PriorityQueue<int[]> queue = new PriorityQueue<int[]>(new Comparator<int[]>() { public int compare(int[] m, int[] n) { return m[1] - n[1]; } }); for (Map.Entry<Integer, Integer> entry : occurrences.entrySet()) { int num = entry.getKey(), count = entry.getValue(); if (queue.size() == k) { if (queue.peek()[1] < count) { queue.poll(); queue.offer(new int[]{num, count}); } } else { queue.offer(new int[]{num, count}); } } int[] ret = new int[k]; for (int i = 0; i < k; ++i) { ret[i] = queue.poll()[0]; } return ret; } 解析一下以上java代码
这段代码是一个用于获取数组中前k个出现频率最高的元素的函数。它使用了哈希表(HashMap)来记录每个元素出现的次数。然后,通过优先队列(PriorityQueue)来维护当前出现频率最高的k个元素。
代码首先遍历数组,使用哈希表occurrences记录每个元素出现的次数。接下来,创建一个优先队列queue,并通过传入一个自定义的比较器来确定元素之间的优先级。比较器中,通过比较数组中索引为1的元素来确定元素的优先级。
然后,遍历occurrences的每个键值对,将键和值构造成一个int数组,并将其插入到优先队列queue中。在插入过程中,如果队列的大小已经达到了k个,并且当前元素的出现次数比队列中最小优先级的元素的次数更高,则将最小优先级元素移除,再将当前元素插入队列。
最后,从优先队列queue中依次弹出前k个元素的第一个值(即数组中的值),并将它们存储在结果数组ret中。最后,返回结果数组ret作为函数的输出。
综上所述,该函数可以通过优先队列和哈希表来快速获取数组中前k个出现频率最高的元素。
Java2.编写程序,将一个字符串中的单词解析出来,然后将他们添加到一个HashSet中,并输出每个重复的单词个数、不重复的单词个数,消除重复后的单词列表。
以下是Java代码实现:
```java
import java.util.*;
public class WordParser {
public static void main(String[] args) {
String input = "Hello world, hello Java! This is a Java program.";
String[] words = input.split("[\\s\\p{Punct}]+"); // 解析出单词
Set<String> wordSet = new HashSet<>(); // 用HashSet保存不重复的单词
Map<String, Integer> wordCountMap = new HashMap<>(); // 用HashMap保存每个单词出现的次数
// 统计单词个数
for (String word : words) {
wordSet.add(word); // 添加到HashSet中
wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1); // 统计每个单词出现的次数
}
// 输出结果
System.out.println("不重复的单词个数:" + wordSet.size());
System.out.println("重复的单词个数:");
for (Map.Entry<String, Integer> entry : wordCountMap.entrySet()) {
if (entry.getValue() > 1) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
System.out.println("消除重复后的单词列表:" + wordSet);
}
}
```
运行结果:
```
不重复的单词个数:7
重复的单词个数:
Java: 2
hello: 2
单词: 2
程序: 1
world: 1
This: 1
消除重复后的单词列表:[Java, This, 程序, hello, world, 单词, a]
```
解析:
1. 使用正则表达式 `"[\\s\\p{Punct}]+"` 将字符串解析为单词数组,其中 `\\s` 表示空白字符,`\\p{Punct}` 表示标点符号。`+` 表示匹配一个或多个连续的空白字符或标点符号。
2. 创建 HashSet 和 HashMap 分别用于保存不重复的单词和每个单词出现的次数。
3. 遍历单词数组,将每个单词添加到 HashSet 中,然后更新 HashMap 中对应单词的出现次数。
4. 输出不重复的单词个数,以及出现次数大于 1 的单词和它们的出现次数。
5. 输出 HashSet 中保存的不重复单词列表。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)