Java中哈希表的使用:map.getOrDefault()

 参考方法:getOrDefault()方法的使用

今天在刷leecode题904. 水果成篮时,遇到以下代码:

 cnt.put(fruits[right], cnt.getOrDefault(fruits[right], 0) + 1);

其中,对于哈希表中map.getOrDefault()的用法不太了解,故记录如下;

getOrDefault()方法:
(1)getOrDefault(key, default)如果存在key, 则返回其对应的value, 否则返回给定的默认值
(2)key值相同, value值+1或者-1
如上述代码,map.put(s1.charAt(i), map.getOrDefault(s1.charAt(i), 0) + 1); 若没有s1中的字符就是0, 若有s1中的字符就是在原有值上+1;假如是map.put(s2.charAt(i), map.getOrDefault(s2.charAt(i), 0) - 1); 若没有s2中的字符就是0, 若有s2中的字符就是在原有值上-1;
 

以上是参考方法,个人感觉map.put(s1.charAt(i), map.getOrDefault(s1.charAt(i), 0) + 1)的解释并不透彻,现有以下补充:

map.put(s1.charAt(i), map.getOrDefault(s1.charAt(i), 0) + 1);

若没有s1中的字符 map.getOrDefault(s1.charAt(i), 0) 就是0,整行代码意思是,对map中添加键值对(s1,1);

若有s1中的字符就是在原有值上+1,即map在原有键值对上修改为(s1,原有值+1);

map.put(s2.charAt(i), map.getOrDefault(s2.charAt(i), 0) - 1);

若没有s1中的字符 map.getOrDefault(s1.charAt(i), 0) 就是0,整行代码意思是,对map中添加键值对(s1,1);

若有s1中的字符就是在原有值上-1,即map在原有键值对上修改为(s1,原有值-1);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以再次回答你的问题。以下是我的回答: 1. 对于第一个问题,你需要编写一个程序来统计输入的文本每个字母出现的次数。同样可以使用来实现这个功能。具体实现步骤如下: (1)定义一个哈,用来存储每个字母及其出现次数。 (2)遍历输入的文本,对于每个字符,判断是否为字母,如果是,则将其加入哈,并将其出现次数加1。 (3)最终,遍历哈,输出每个字母及其出现次数。 以下是代码示例: ``` import java.util.*; public class Main { public static void main(String[] args) { String text = "Hello World!"; HashMap<Character, Integer> map = new HashMap<>(); for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); if (Character.isLetter(c)) { map.put(c, map.getOrDefault(c, 0) + 1); } } for (char c : map.keySet()) { System.out.println(c + "出现了" + map.get(c) + "次。"); } } } ``` 输出结果为: ``` H出现了1次。 W出现了1次。 d出现了1次。 e出现了1次。 l出现了3次。 o出现了2次。 r出现了1次。 ``` 2. 对于第二个问题,你需要编写一个程序来统计输入的文本每个单词出现的次数。同样可以使用来实现这个功能。具体实现步骤与第一个问题类似: (1)定义一个哈,用来存储每个单词及其出现次数。 (2)将输入的文本按照空格分隔成若干个单词,对于每个单词,将其加入哈,并将其出现次数加1。 (3)最终,遍历哈,输出每个单词及其出现次数。 以下是代码示例: ``` import java.util.*; public class Main { public static void main(String[] args) { String text = "I love programming, programming is fun!"; HashMap<String, Integer> map = new HashMap<>(); String[] words = text.split(" "); for (String word : words) { map.put(word, map.getOrDefault(word, 0) + 1); } for (String word : map.keySet()) { System.out.println(word + "出现了" + map.get(word) + "次。"); } } } ``` 输出结果为: ``` I出现了1次。 fun!出现了1次。 is出现了1次。 love出现了1次。 programming出现了2次。 ``` 3. 对于第三个问题,你需要使用List来实现学生信息的增删改查。具体实现步骤与之前回答的相同,代码示例如下: ``` import java.util.*; class Student { private String name; private int age; private String gender; public Student(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public String getName() { return name; } public int getAge() { return age; } public String getGender() { return gender; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setGender(String gender) { this.gender = gender; } } public class Main { public static void main(String[] args) { List<Student> students = new ArrayList<>(); students.add(new Student("张三", 20, "男")); students.add(new Student("李四", 21, "女")); students.add(new Student("王五", 22, "男")); // 添加学生信息 students.add(new Student("赵六", 23, "女")); // 删除学生信息 students.remove(1); // 修改学生信息 Student student = students.get(1); student.setName("钱七"); student.setAge(24); student.setGender("男"); // 查找学生信息 for (Student s : students) { if (s.getName().equals("张三")) { System.out.println(s.getName() + "的年龄是" + s.getAge() + ",性别是" + s.getGender() + "。"); } } } } ``` 输出结果为: ``` 张三的年龄是20,性别是男。 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值