Java:这个类HashMap方法的含义是什么?

use*_*180 4 java dictionary

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);
}
Run Code Online (Sandbox Code Playgroud)

我在循环中对对象所做的更改是在地图中的相同对象上进行的?

指南说明了这个values()方法

返回此映射中包含的值的Collection视图.该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然.

"更改地图"是否意味着"对映射对象的更改"?那么这种setField方法可以改变地图中的对象吗?

T.J*_*der 6

"更改地图"是否意味着"对映射对象的更改"?

这意味着对地图的更改(但请参见下面的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
Run Code Online (Sandbox Code Playgroud)

实例


1另外:无论您是通过集合还是地图获得对这些对象的引用,自然会更改为存储为地图中值的对象的状态; 它们是对象的引用,而不是对象的副本.