2010-11-03 3 views
1

Я использую TreeMap<Integer,Object>() для хранения значений.
Теперь у моего Object есть компонент, Object.value(), который продолжает увеличиваться в соответствии с значениями, считанными из файла.
So, Я оцениваю, существует ли ключ и необходимо обновить значение.
Я не понимаю, как я могу обновлять значения в Map на Java.
Я не могу просто заменить всю запись, так как новые значения необходимо добавить к существующему значению записи.
Есть ли лучший способ сделать это, чем использовать карту? Я использовал карту, потому что буду продолжать поиск ключей.
Любые предложения?Как обновить значения на карте?

+1

Объект - это фактический тип Java. Таким образом, вы не хотите использовать его, есть пример типа когда-либо. – shoebox639

+0

Я исправил орфографию и форматирование вашего сообщения. Обратите внимание, что Java зависит от случая и орфографии, поэтому, если ваш код фактически использует 'treemap' или' Intger', вы получите ошибки и не сможете построить. – Pops

ответ

3

Ну, используя карту, правильно, если вы хотите иметь быстрый доступ к вашим парам ключ-значение. Если вы являетесь значениями MyObjects с .value(), вы не можете получить объект и сбросить его?

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

Я использую MyObject здесь, как плакат с использованием Object для обозначения пример типа.

+1

Хороший ответ, но, возможно, используйте MyObject, чтобы избежать путаницы? –

+0

Lol ok Я сделаю это. Плакат также должен быть. – shoebox639

0

Ваш «объект» должен иметь сеттер, который обновляет значение. Таким образом, вы просто извлекаете объект, о котором идет речь, с карты, вызывайте установщик на этом объекте, et voila. Единственное препятствие, о котором вы должны позаботиться, это то, что все, что вы делаете в своем методе setXXX, не изменяет исходящие из методов equals и hashCode, так как это нарушает инварианты, подразумеваемые TreeMap и приведет к непредсказуемому поведению. Вы объект может выглядеть следующим образом:

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

Вы можете вытащить его из TreeMap, вызовите increment() и не должны изменять содержимое самого TreeMap.

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); 

Надеюсь, это поможет.

+0

Вы, вероятно, путаете его, предлагая, что HashTable - это не карта. –

+1

Также HashMap предпочтительнее Hashtable, если у вас нет особой необходимости синхронизации. –