HashMap存储List不覆盖方法——HashMap存储引用

相信很多时候都会有这样的需求,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,看起来也优雅不少。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容