Существует четыре общих типа модификаций, которые вы можете сделать с ключами или значениями в HashMap.
- Чтобы изменить ключ HashMap, вы увидите объект значения с помощью get, затем удалите старый ключ и поместите его новым ключом.
- Чтобы изменить поля в объекте значения, посмотрите объект value вверх по ключу с помощью get, а затем используйте его методы настройки.
- Чтобы полностью заменить объект значения, просто поместите новый объект значения в старый ключ.
- Чтобы заменить объект значения на один на основе старого, посмотрите объект value с помощью get, создайте новый объект, скопируйте данные из старого, затем поместите новый объект под тот же ключ.
Что-то вроде этого примера.
static class Food
{
// ------------------------------ FIELDS ------------------------------
String colour;
String name;
float caloriesPerGram;
// -------------------------- PUBLIC INSTANCE METHODS --------------------------
public float getCaloriesPerGram()
{
return caloriesPerGram;
}
public void setCaloriesPerGram(final float caloriesPerGram)
{
this.caloriesPerGram = caloriesPerGram;
}
public String getColour()
{
return colour;
}
public void setColour(final String colour)
{
this.colour = colour;
}
public String getName()
{
return name;
}
public void setName(final String name)
{
this.name = name;
}
public String toString()
{
return name + " : " + colour + " : " + caloriesPerGram;
}
// --------------------------- CONSTRUCTORS ---------------------------
Food(final String name, final String colour, final float caloriesPerGram)
{
this.name = name;
this.colour = colour;
this.caloriesPerGram = caloriesPerGram;
}
}
// --------------------------- main() method ---------------------------
/**
* Sample code to TEST HashMap Modifying
*
* @param args not used
*/
public static void main(String[] args)
{
// create a new HashMap
HashMap<String, Food> h = new HashMap<String, Food>(149
/* capacity */,
0.75f
/* loadfactor */);
// add some Food objecs to the HashMap
// see http://www.calorie-charts.net for calories/gram
h.put("sugar", new Food("sugar", "white", 4.5f));
h.put("alchol", new Food("alcohol", "clear", 7.0f));
h.put("cheddar", new Food("cheddar", "orange", 4.03f));
h.put("peas", new Food("peas", "green", .81f));
h.put("salmon", new Food("salmon", "pink", 2.16f));
// (1) modify the alcohol key to fix the spelling error in the key.
Food alc = h.get("alchol");
h.put("alcohol", alc);
h.remove("alchol");
// (2) modify the value object for sugar key.
Food sug = h.get("sugar");
sug.setColour("brown");
// do not need to put.
// (3) replace the value object for the cheddar key
// don't need to get the old value first.
h.put("cheddar", new Food("cheddar", "white", 4.02f));
// (4) replace the value object for the peas key with object based on previous
Food peas = h.get("peas");
h.put("peas", new Food(peas.getName(), peas.getColour(), peas.getCaloriesPerGram() * 1.05f));
// enumerate all the keys in the HashMap in random order
for (String key : h.keySet())
{
out.println(key + " = " + h.get(key).toString());
}
}// end main
}
Я надеюсь, что это помогает
Вы можете * никогда * изменять значение ключа на карте. – EJP
так с точки зрения производительности, это решение, которое у меня здесь в порядке? Потому что там будут тысячи этих звонков в час. – lisak
@EJP. Я меняю здесь только ключи от карты. – lisak