为了账号安全,请及时绑定邮箱和手机立即绑定

从 hashmap.values() 初始化的列表中删除项目时会发生什么?

从 hashmap.values() 初始化的列表中删除项目时会发生什么?

潇湘沐 2021-09-03 12:31:05
我在 A 类中有以下声明:Map<String, MyClass> myMap = Collections.synchronizedMap(new LinkedHashMap<String, MyClass>());A类也有这个功能:public List<MyClass> getMapValuesAsList() {    return new ArrayList<>(myMap.values());}在 B 类中,我有一个List这样的初始化:List<MyClass> myList = cart.getMapValuesAsList();我假设的是myList保留对myMap. 当我在 中的项目中调用 setter 函数时myList,相关值也在 中更新myMap,支持我的假设。但是,每当我从 中删除项目时myList,都会myMap继续将MyClass实例保留在其中。这个被移除的实例可能不会被垃圾回收,因为它myMap仍然有一个对它的引用。我对吗?当值在其他地方被删除时,是否有任何自动方法可以从地图中删除键值对?更新:B 类传递myList给 Android 适配器。因此,我需要某种get功能。Collection没有这样的方法。有什么建议吗?
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

List包含对是你的价值观的实例的引用Map,这样的突变的各个元素的状态List的变异值Map

另一方面, yourList不受 支持Map,因此删除它的元素不会影响Map.

当值在其他地方被删除时,是否有任何自动方法可以从地图中删除键值对?

是的,如果直接从Collectionby 返回的元素中删除一个元素myMap.values(),它也会从Map.

这是 Javadoc 中的状态values()

集合 java.util.Map.values()

返回此映射中包含的值的集合视图。集合由映射支持,因此对映射的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(通过迭代器自己的删除操作除外),则迭代的结果是不确定的。该集合支持元素移除,通过 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作从 map 中移除相应的映射。它不支持 add 或 addAll 操作。


查看完整回答
反对 回复 2021-09-03
  • 1 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信