Я использую TreeMap<Integer,Object>()
для хранения значений.
Теперь у моего Object
есть компонент, Object.value()
, который продолжает увеличиваться в соответствии с значениями, считанными из файла.
So, Я оцениваю, существует ли ключ и необходимо обновить значение.
Я не понимаю, как я могу обновлять значения в Map
на Java.
Я не могу просто заменить всю запись, так как новые значения необходимо добавить к существующему значению записи.
Есть ли лучший способ сделать это, чем использовать карту? Я использовал карту, потому что буду продолжать поиск ключей.
Любые предложения?Как обновить значения на карте?
ответ
Ну, используя карту, правильно, если вы хотите иметь быстрый доступ к вашим парам ключ-значение. Если вы являетесь значениями MyObjects
с .value()
, вы не можете получить объект и сбросить его?
MyObject myObj = treeMap.get(key);
myObj.setValue(myObj.getValue()++);
Я использую MyObject здесь, как плакат с использованием Object
для обозначения пример типа.
Хороший ответ, но, возможно, используйте MyObject, чтобы избежать путаницы? –
Lol ok Я сделаю это. Плакат также должен быть. – shoebox639
Ваш «объект» должен иметь сеттер, который обновляет значение. Таким образом, вы просто извлекаете объект, о котором идет речь, с карты, вызывайте установщик на этом объекте, et voila. Единственное препятствие, о котором вы должны позаботиться, это то, что все, что вы делаете в своем методе setXXX
, не изменяет исходящие из методов equals
и hashCode
, так как это нарушает инварианты, подразумеваемые TreeMap
и приведет к непредсказуемому поведению. Вы объект может выглядеть следующим образом:
class AnObject {
private int cnt;
public void increment() { this.cnt++ };
}
Вы можете вытащить его из TreeMap
, вызовите increment()
и не должны изменять содержимое самого TreeMap
.
Я не уверен, что вы пытаетесь сделать, но если вы просто хотите сохранить объекты с ключами, вы должны использовать 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);
Надеюсь, это поможет.
Вы, вероятно, путаете его, предлагая, что HashTable - это не карта. –
Также HashMap предпочтительнее Hashtable, если у вас нет особой необходимости синхронизации. –
Объект - это фактический тип Java. Таким образом, вы не хотите использовать его, есть пример типа когда-либо. – shoebox639
Я исправил орфографию и форматирование вашего сообщения. Обратите внимание, что Java зависит от случая и орфографии, поэтому, если ваш код фактически использует 'treemap' или' Intger', вы получите ошибки и не сможете построить. – Pops