getOrDefault()方法的使用
1.getOrDefault(key,default)
作用:如果存在相应的key则返回其对应的value,否则返回给定的默认值。
2.key的值相同,使value的值加一。比如需要统计一个字符串中所含的字母及对应字母的个数。
方法:
(1)定义一个哈希表hash
(2)hash.put(c,hash.getOrDefault(c,0)+1); //若没有就是0,若有就是原有值增一。
3.比较两个哈希表中key对应的value值大小:如果其中一个哈希表中不存在某个key,那么两个hash表如何比较。
方法:
hash1.getOrDefault(c,0) < hash2.getOrDefault(c,0) //如果两个哈希表都有某个key值,那么他们比较的就是其中value的大小,若其中一个哈希表不存在某个key值,那么比较的就是其中的默认值。
案例:leetcode(1160)
代码:
class Solution {
public int countCharacters(String[] words, String chars) {
Map<Character,Integer> hash = new HashMap<>();
char[] str = chars.toCharArray();
for(int i=0;i<str.length;i++){
hash.put(str[i],hash.getOrDefault(str[i], 0) + 1);
}
int len = 0;
for(int i=0;i<words.length;i++){
Map<Character,Integer> map = new HashMap<>();
for(int j=0;j<words[i].length();j++){
char c = words[i].charAt(j);
map.put(c,map.getOrDefault(c, 0) + 1);
}
boolean isContain = true;
for(int j=0;j<words[i].length();j++){
char c = words[i].charAt(j);
if(hash.getOrDefault(c,0)<map.getOrDefault(c,0)){
isContain = false;
break;
}
}
if(isContain){
len += words[i].length();
}
}
return len;
}