平时在用map的计次时候,总会用这个方法,大部分使用场景都是统计不同对象的出现次数,示例代码如下:
int[] ss = {3,3,3,3,3,1,3};
Map<Integer,Integer> dd = new HashMap<>();
for (int temp:ss){
int cnt = dd.getOrDefault(temp,0);
cnt++;
dd.put(temp,cnt);
}
,但是今天当value是集合的时候,我这么写就出错了
public void groupThePeople(int[] groupSizes) {
Map<Integer,List<Integer>> src = new HashMap<>();
for (int i=0;i<groupSizes.length;i++){
List<Integer> temp = src.getOrDefault(groupSizes[i],new ArrayList<>());
temp.add(i);
}
}
最后src是空,检查了一下,发现用错了,方法的源码如下:
@Override
public V getOrDefault(Object key, V defaultValue) {
Node<K,V> e;
return (e = getNode(hash(key), key)) == null ? defaultValue : e.value;
}
检查key不存在就返回默认值,但是这个默认值依旧没存在map中,所以,需要我们再put进去。
如果map的value是集合的话,我们习惯取出来直接add,所以一不留神就会出错,小问题,记一下~