如何更新地图中的值?

时间:2010-11-03 14:48:37

标签: java collections

我使用TreeMap<Integer,Object>()来存储值 现在我的Object有一个组件Object.value(),它根据从文件中读取的值不断增加。
所以,我评估密钥是否存在并且需要更新值 我不明白如何在Java中更新Map中的值 我不能只替换整个记录,因为需要将新值添加到现有记录值 有没有比使用地图更好的方法呢?我使用了地图,因为我会继续寻找钥匙 有什么建议吗?

3 个答案:

答案 0 :(得分:3)

如果您希望能够快速访问键值对,那么使用地图是正确的。如果您的值仅为MyObjects.value(),则无法获取对象并重置该值?

MyObject myObj = treeMap.get(key);
myObj.setValue(myObj.getValue()++);

我在这里使用MyObject,因为海报使用Object来表示示例类型。

答案 1 :(得分:0)

您的“对象”需要有一个更新值的setter。所以你只需要从地图中检索有问题的对象,在这个对象上调用setter,等等。您必须要处理的唯一障碍是,无论您使用setXXX方法做什么都不会改变equalshashCode方法的输出,因为这会违反TreeMap隐含的不变量{1}}并将导致不可预测的行为。 You Object可能如下所示:

class AnObject {
   private int cnt;
   public void increment() { this.cnt++ };
}

您可以将其从TreeMap中取出,拨打increment(),而不必更改TreeMap本身的内容。

答案 2 :(得分:0)

我不确定你要做什么,但如果你只想用钥匙存储对象,你应该使用Hashtable。它允许将键映射到对象。

//create a hashtable
//the first template type is the type of keys you want to use
//the second is the type of objects you store (your Object)
Hashtable <Integer,MyObject> myHashtable = new Hashtable <Integer,MyObject> ();

//Now you create your object, and set one of its fields to 4.
MyObject obj = new MyObject();
obj.setValue(4);

//You insert the object into the hashtable, with the key 0.
myHashtable.put(0,obj);

//Now if you want to change the value of an object in the hashtable, you have to retrieve it from its key, change the value by yourself then re-insert the object into the hashtable.
MyObject obj2 = myHashtable.get(0);

obj.setValue(obj.getValue() + 2);

//This will erase the previous object mapped with the key 0.
myHashtable.put(0,obj);

希望这有帮助。