代码之家  ›  专栏  ›  技术社区  ›  Mehmed Andrew Lam

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

  •  2
  • Mehmed Andrew Lam  · 技术社区  · 6 年前

    我在A级有以下声明:

    Map<String, MyClass> myMap = Collections.synchronizedMap(new LinkedHashMap<String, MyClass>());
    

    A类还具有以下功能:

    public List<MyClass> getMapValuesAsList() {
        return new ArrayList<>(myMap.values());
    }
    

    List 初始化如下:

    List<MyClass> myList = cart.getMapValuesAsList();
    

    我认为 myList 保留对的值的引用 myMap . 当我在中的项中调用setter函数时 糜棱岩 ,相关值也会在中更新 我的地图 糜棱岩 , 继续保持 MyClass 实例。此已删除的实例可能不会被垃圾收集,因为 我的地图

    当键值在其他地方被删除时,是否有自动的方法从映射中删除键值对?

    糜棱岩 到Android适配器。因此,我需要一些 get 功能。集合没有这样的方法。有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Eran    6 年前

    你的 List Map ,所以改变 使 地图 .

    列表 不受 地图 地图

    当键值在其他地方被删除时,是否有自动的方法从映射中删除键值对?

    是的,如果您直接从 Collection 退回人 myMap.values() 地图 .

    values()

    收藏java.util.Map文件.values()

    返回此中包含的值的集合视图地图。地图集合由映射支持,因此对映射的更改将反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(除了通过迭代器自己的remove操作),则迭代的结果是未定义的。 集合支持元素移除,这将从映射中移除相应的映射 ,通过迭代器.remove, 集合.删除,移除所有、保留和清除操作。它不支持add或addAll操作。

    推荐文章