【问题标题】:In the HashMap of Java, will removing an element from keySet affect the hashmap object?在Java的HashMap中,从keySet中移除一个元素会影响hashmap对象吗?
【发布时间】:2017-09-19 05:37:06
【问题描述】:

假设我有一个名为myMap 的HashMap,然后我从中得到一个keySet 对象并修改keySet

Set<Integer> keys = myMap.keySet();
keys.remove(1);
keys.remove(2);

如果myMap 在这个sn-p 之前包含12 作为键,那么在这个sn-p 执行之后myMap 会被改变吗?

【问题讨论】:

  • keySet()values()entrySet() 的返回值由地图支持。

标签: java hashmap iterator


【解决方案1】:

是的。从键集中删除元素会从映射中删除相应的条目。引用Javadoc

该集合支持元素移除,即通过Iterator.removeSet.removeremoveAllretainAllclear 操作从映射中移除相应的映射。

【讨论】:

    【解决方案2】:
    jshell> HashMap<Integer, Integer> a = new HashMap<>();
    a ==> {}
    
    jshell> Set<Integer> b = a.keySet();
    b ==> []
    
    jshell> b
    b ==> []
    
    jshell> a.put(1,2)
    $4 ==> null
    
    jshell> a
    a ==> {1=2}
    
    jshell> b
    b ==> [1]
    
    jshell> b.remove(1)
    $7 ==> true
    
    jshell> a
    a ==> {}
    
    jshell> b
    b ==> []
    

    答案是肯定的。

    【讨论】:

    • 这是一个糟糕的答案 (IMO)。这只是 Java 的一种实现中这种行为的证据。证明是 javadocs specify 这种行为......并且这种行为对于指定 Map API 的所有 Java 版本都是一致的。
    • 同意,只是在此发帖作为补充
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2020-02-28
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多