我使用TreeMap<Integer,Object>()
来存储值
现在我的Object
有一个组件Object.value()
,它根据从文件中读取的值不断增加。
所以,我评估密钥是否存在并且需要更新值
我不明白如何在Java中更新Map
中的值
我不能只替换整个记录,因为需要将新值添加到现有记录值
有没有比使用地图更好的方法呢?我使用了地图,因为我会继续寻找钥匙
有什么建议吗?
答案 0 :(得分:3)
如果您希望能够快速访问键值对,那么使用地图是正确的。如果您的值仅为MyObjects
且.value()
,则无法获取对象并重置该值?
MyObject myObj = treeMap.get(key);
myObj.setValue(myObj.getValue()++);
我在这里使用MyObject,因为海报使用Object
来表示示例类型。
答案 1 :(得分:0)
您的“对象”需要有一个更新值的setter。所以你只需要从地图中检索有问题的对象,在这个对象上调用setter,等等。您必须要处理的唯一障碍是,无论您使用setXXX
方法做什么都不会改变equals
和hashCode
方法的输出,因为这会违反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);
希望这有帮助。