相信很多时候都会有这样的需求,HashMap存储一个list,然后需要在list中添加元素,而HashMap的put方法又会覆盖value,导致我们经常这样去写:
Map<Long , List<String>> catalogIdMap = new HashMap<>();
categoryCatalogMapList.forEach(item ->{
//创建list,用于重新put
List<String> tmp = new ArrayList();
tmp.add(item.getCode());
if(catalogIdMap.containsKey(item.getCatalogId())){
//key下有value的情况下,先取出list
tmp.addAll(catalogIdMap.get(item.getCatalogId()));
}
catalogIdMap.put(item.getCatalogId(),tmp);
});
这种方式需要去新建一个List,需要浪费空间,看起来也不是很优雅,然后决定优化下,有了下面的代码:
Map<Long , List<String>> catalogIdMap = new HashMap<>();
categoryCatalogMapList.forEach(item ->{
if(catalogIdMap.containsKey(item.getCatalogId())){
//由于HashMap存的是list的引用,只需要直接add
catalogIdMap.get(item.getCatalogId()).add(item.getCode());
}else{
catalogIdMap.put(item.getCatalogId(),new ArrayList<String>(){ {add(item.getCode());} } );
}
});
实现的效果一样,由此可见HashMap存的list只是引用。
没有新建List,看起来也优雅不少。