首页 > 编程知识 正文

map()方法,map.get方法

时间:2023-05-03 05:40:54 阅读:197129 作者:4146

Map-map.getOrDefault()用法 前言:API展示:我的理解:用途:总结:力扣实战:

前言:

我之所以会认识到它,是因为在做一道leetcode题的时候发现如果想在每个数据上进行累加我必须先给每个key赋初值才行 (如果不赋初值在计算一开始就会报空指针异常) ,但这显得十分麻烦代码看起来十分冗余并让程序执行效率降低,于是后来在看了其他人的题解过程中无意发现了这个方法,经过查阅后发现map可以直接赋初值并计算。也就是该文所要讲述的map.getOrDefault().

API展示:

我的理解:

Map.getOrDefault(Object key, V defaultValue)方法的作用是:
  (1)当Map集合中存在这个key时,就使用这个key值,(若是数值型可以在此基础上进行运算)
  (2)如果没有就使用默认值defaultValue

用途:

代码演示1(使用前):

String t="ABC"char ch[] = t.toCharArray(); List<Character> list = new ArrayList<>(); //将A中的每个值传入list //我是为了后面做题才这么写的,当时想的有点复杂 for (int k = 0; k < t.length; k++) { list.add(ch[k]); }//-------------正式开始-------------HashMap<Character, Integer> map = new HashMap();//先将每个key的value赋值为0,因为不赋初值直接计算会报该空指针异常 for (int k = 0; k < lists.size(); k++) { map.put(list.get(k), 0); } //逐个进行计算 for (int k = 0; k < lists.size(); k++) { map.put(list.get(k), map1.get(list.get(k)) + 1); }

代码演示2(使用后):

String t="ABC" Map<Character, Integer> map = new HashMap<>(); //遍历字符串 t,初始化每个字母的次数 for (int i = 0; i < t.length(); i++) { char chat= t.charAt(i); map.put(chat, map.getOrDefault(chat, 0) + 1); } 总结:

很明显可以看出我和大佬之间思维的差距,我的明显麻烦很多,所以我觉得这个方法确实帮助到了我所以做下笔记来记载下吧,若有什么不对还请大家指出,谢谢!!

力扣实战: 最小覆盖子串(滑动窗口)
链接:https://leetcode-cn.com/problems/minimum-window-substring/ class Solution { public String minWindow(String s, String t) { Map<Character, Integer> map = new HashMap<>(); //遍历字符串 t,初始化每个字母的次数 for (int i = 0; i < t.length(); i++) { char char_i = t.charAt(i); map.put(char_i, map.getOrDefault(char_i, 0) + 1); } int left = 0; //左指针 int right = 0; //右指针 int ans_left = 0; //保存最小窗口的左边界 int ans_right = -1; //保存最小窗口的右边界 int ans_len = Integer.MAX_VALUE; //当前最小窗口的长度 //遍历字符串 s while (right < s.length()) { char char_right = s.charAt(right); //判断 map 中是否含有当前字母 if (map.containsKey(char_right)) { //当前的字母次数减一 map.put(char_right, map.get(char_right) - 1); //开始移动左指针,减小窗口 while (match(map)) { //如果当前窗口包含所有字母,就进入循环 //当前窗口大小 int temp_len = right - left + 1; //如果当前窗口更小,则更新相应变量 if (temp_len < ans_len) { ans_left = left; ans_right = right; ans_len = temp_len; } //得到左指针的字母 char key = s.charAt(left); //判断 map 中是否有当前字母 if (map.containsKey(key)) { //因为要把当前字母移除,所有相应次数要加 1 map.put(key, map.get(key) + 1); } left++; //左指针右移 } } //右指针右移扩大窗口 right++; } return s.substring(ans_left, ans_right+1);} //判断所有的 value 是否为 0 private boolean match(Map<Character, Integer> map) { for (Integer value : map.values()) { if (value > 0) { return false; } } return true; }}

持续更新中…

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。