关于清空set后map中原本指向set的集合也清空的问题

想做一个简单的程序,循环判断符合条件的元素插入set,再将set作为<K,V>中的V存入map

但每次循环需要清空set,此时map中指向的地址同时会被清空

set.clear();//存储在map中的数据也会被清空

此时想到将set转为ArrayList再put进map中 

List<String> arrayList= new ArrayList<>();
Map<String, List> map = new HashMap<>();
Set<String> set= new HashSet<>();
//将数据存入set
arrayList.addAll(set);
map.put(1,arrayList);
arrayList.clear();//存储在map中的数据也会被清空

看别人的博客了解到List的三种清空方式(原文链接

1.用list.clear()方法清空list;用此方法,其它引用该list的值也会变成空。

list2 = list;//此时list2有值
list.clear();//先将list赋值给list2,再清空,此时list和list2都为空

2.用list = null来清空list

3.new ArrayList()来清空list

方法1、2都行不通,方法3在效果上可以成功

List<String> arrayList= new ArrayList<>();
Map<String, List> map = new HashMap<>();
Set<String> set= new HashSet<>();
//将数据存入set
arrayList.addAll(set);
map.put(1,arrayList);
arrayList= new ArrayList<>();

 此时arrayList可循环保存下一个set的值,并存储在map中

转而尝试使用new HashSet()清空set,仍然不能成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值