映射获取值查询

时间:2011-09-21 08:05:49

标签: java hashmap

如果我们从Map中检索值,然后我们会做一些更改, 所以我们再次需要将该对象放回Map

for ex

       Human human  = (Human ) domainObjects
            .get(Constants.Human;
       human.setName("Vish");

   domainObjects.put(Constants.Human, human);

或者当我们传递对象的引用时,即使不使用Map put函数,更改也将出现在域对象中

5 个答案:

答案 0 :(得分:4)

Map返回对底层对象的引用的副本。不是对象的副本。当你调用setName时,你正在改变对象。

看起来你应该为你使用枚举常量或普通类。

Map<EnumType, Object> map = new EnumMap<EnumType, Object>(EnumType.class);
Human human = (Human) map.get(EnumType.Human);

Map<Class, Object> map = new LinkedHashMap<Class, Object>();
Human human = (Human) map.get(Human.class); // no need for a constant.

答案 1 :(得分:1)

无需再次提起。更改将在单个对象上。

答案 2 :(得分:1)

  • 如果从HashMap获取一个Object,它将作为引用传递给您,因此对其方法的任何调用都将影响Map中包含的对象。
  • 但请注意,新的实例不会影响地图中包含的对象。

示例:

Map<Integer, Human> map = new HashMap<Integer, Human>();
map.put(1, new Human("Toto"));

Human human = map.get(1);
human.setName("Tutu");
human = new Human("Tata");

System.out.println(map.get(1).getName()); // "Tutu"
System.out.println(human.getName()); // "Tata"

答案 3 :(得分:0)

Java的工作原理是对象,而不是原语。所以你将一直使用相同的“内存块”。在指向该对象的所有变量中都可以看到更改。

答案 4 :(得分:0)

NO。你需要理解两个概念,变量和对象,并且知道java是通过引用传递对象。

你写下来并在你身上声明的'人'.java源文件是一个变量, 在运行时,'human'变量是对某个对象的引用。

所以任何方法返回值实际上都是一个引用对象的变量。 (基本上,大部分时间,简单的情况......)

当你调用variable.method()时,它实际上告诉jvm调用引用对象的方法。

在你的情况下,它更新对象(由'人'变量引用''名称'字段,值为'wish'