相信很多時(shí)候都會(huì)有這樣的需求,HashMap存儲(chǔ)一個(gè)list,然后需要在list中添加元素,而HashMap的put方法又會(huì)覆蓋value,導(dǎo)致我們經(jīng)常這樣去寫:
Map<Long , List<String>> catalogIdMap = new HashMap<>();
categoryCatalogMapList.forEach(item ->{
//創(chuàng)建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);
});
這種方式需要去新建一個(gè)List,需要浪費(fèi)空間,看起來(lái)也不是很優(yōu)雅,然后決定優(yōu)化下,有了下面的代碼:
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());} } );
}
});
實(shí)現(xiàn)的效果一樣,由此可見HashMap存的list只是引用。
沒有新建List,看起來(lái)也優(yōu)雅不少。