0

私はConcurrentMap<Integer, MyObj>自分のプログラムに参加しています。MyObjキーを知っている場合、変更できますか?削除して新しいものを入れずにMyObj

4

3 に答える 3

4

「変更」の定義によって異なります。内部の何かを変更したいがMyObj、そのオブジェクトが変更可能である場合は、確かにこれを行うことができます。

ConcurrentMap<Integer, MyObj> map = /* snip */;
map.get(someKey).callMutatorMethod();

オブジェクトを完全に新しいインスタンスに置き換えたい場合は、を呼び出すだけでMap#put()、既存のマップされた値が存在する場合は上書きされます。

于 2012-04-06T17:44:21.033 に答える
3

それだけでなく、オブジェクトへの元の参照を保持している場合でも、それを変更できます。

MyObject o = new MyObject();
myMap.put("key", o);

o.setName("foo");
myMap.get("key").getName(); //will return "foo"
myMap.get("key").setName("bar");
myMap.get("key").getName(); //will return "bar"

o = null; //this applies only for your local reference, not for the map
myMap.get("key").getName(); //will STILL return "bar"
于 2012-04-06T17:58:01.420 に答える
0

はい、できます。マップは単にオブジェクトへの参照を保持します。マップを更新しなくても、オブジェクトを変更できます。

Map<Integer, MyObj> myMap = new ConcurrentMap<Integer, MyObj>();
myMap.put(1, new MyObj());
MyObj obj = myMap.get(1);
obj.setFoo("Foo");
于 2012-04-06T17:53:12.190 に答える