私はConcurrentMap<Integer, MyObj>
自分のプログラムに参加しています。MyObj
キーを知っている場合、変更できますか?削除して新しいものを入れずにMyObj
?
質問する
80 次
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 に答える