簡體   English   中英

Java:這個類HashMap方法的含義是什么?

[英]Java: what's the meaning of this method of class HashMap?

class MyObject {
    int field;
    public void setField(int arg1) { 
        this.field = arg1;
    }
} 

HashMap<String, MyObject> map;
... 
... // put some MyObjects in the map with strings as keys
...
for (MyObject object : map.values()) {
    object.setField(12345);
}

我在循環中對對象所做的更改是在地圖中的相同對象上進行的?

該指南說明了values()方法

返回此映射中包含的值的Collection視圖。 該集合由地圖支持,因此對地圖的更改將反映在集合中,反之亦然。

“更改地圖”是否意味着“對映射對象的更改”? 那么這樣setField方法可以改變地圖中的對象嗎?

“更改地圖”是否意味着“對映射對象的更改”?

這意味着對地圖的更改(但請參見下面的1 )。 該集合是地圖中值的實時視圖 ,因此當您向地圖添加條目或從地圖中刪除條目時,集合會反映這些更改; 這兩者是相互關聯的。 例如:

Map<String, String> m = new HashMap<String, String>();
Collection<String> c = m.values();
m.put("hi, "there");
System.out.println(c.size()); // 1, not 0

實例


1另外:無論您是通過集合還是地圖獲得對這些對象的引用,自然會更改為存儲為地圖中的值的對象的狀態; 它們是對象的引用 ,而不是對象的副本

方法HashMap.values() - 如javadoc中所述。

返回此映射中包含的值的Collection視圖。 該集合由地圖支持,因此對地圖的更改將反映在集合中,反之亦然。 如果在對集合進行迭代時修改了映射(除了通過迭代器自己的remove操作),迭代的結果是未定義的。 該集合支持元素刪除,它通過Iterator.remove,Collection.remove,removeAll,retainAll和clear操作從地圖中刪除相應的映射。 它不支持add或addAll操作。

這是說它返回數組中所有元素的集合(類似於List)。 它還聲明該集合由地圖支持,因此如果您更改地圖,集合也將更新,更改集合也將更改地圖。 請注意,無法從此集合中添加元素。

此示例顯示了該方法的使用。

public static void main(String[] args) {
    Map<String, String> mapValues = new HashMap<>();
    mapValues.put("Hi", "Hello");
    mapValues.put("Bye", "Goodbye");
    System.out.println(mapValues.size());//prints 2
    Collection<String> values = mapValues.values();
    values.remove("Hello");
    System.out.println(mapValues.size());//prints 1
    System.out.println(values.size());//prints 1
    mapValues.put("Morning", "Good morning");
    System.out.println(mapValues.size());//prints 2
    System.out.println(values.size());//prints 2
}

values方法返回一組對內存中對象的引用。 由於您的對象是可變的,因此對它們所做的任何更改都將反映在地圖中,因為地圖具有對同一內存的引用。

包含以下內容的Map示例:

"key1" -> "value1"
"key2" -> "value2"

values()將返回以下集合:“value1”,“value2”

是的,如果您在地圖中的對象上使用變異方法,它將在您之前檢索的values()集合中更改。 但最有趣的是, 從map添加/刪除元素會導致值集合發生變化

例:

Map<String, String> map = new HashMap<>();
Collection<String> vals = map.values();
System.out.println("Before: " + vals);
map.put("key1", "value1");
System.out.println("After: " + vals);

這將打印:

Before: []
After: [value1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM