3 回答
TA贡献1880条经验 获得超4个赞
Java HashMap 存储对对象的引用。如果您使用两个不同的键存储相同的对象,则键将指向相同的值。
但这不是你的问题。您的问题是您使用的是 Float 值,而 Float 是一种不可变的数据类型。一旦它被创建,你就不能改变它的价值。要实现您想要做的事情,您需要创建一个可变的 Float 或将浮点存储在容器中并将该容器存储在地图中。最简单的容器之一是单元素数组(尽管我只会在示例代码中使用它,而不会在生产代码中使用它,因为它容易出错并且“自我无法记录”)。
HashMap<String, Float[]> mymap = new HashMap<>();
Float[] val = new Float[] { 5f };
mymap.put("hello", val);
mymap.put("bye", val);
...
mymap.get("bye")[0] = mymap.get("bye")[0] + 5f;
mymap.get("hello")[0] == 10f
TA贡献1719条经验 获得超6个赞
为此,您需要一个可变对象作为 Value,例如:
static class FLoatHolder {
private float f;
public FLoatHolder(float f) {
this.f = f;
}
public float getF() {
return f;
}
public void setF(float f) {
this.f = f;
}
}
Map<String, FLoatHolder> map = new HashMap<>();
FLoatHolder fh = new FLoatHolder(5f);
map.put("bye", fh);
map.put("hello", fh);
FLoatHolder holder = map.get("bye");
holder.setF(holder.getF() + 0.5f);
map.put("bye", holder);
System.out.println(map.get("hello").getF());
TA贡献1827条经验 获得超8个赞
如果您只想让两个键指向同一个值,那完全没问题。地图不关心它们指向什么,只是没有冲突的键。
如果您想将整数值相加,那么您的伪代码将按您的意愿工作。
如果您想要类似指针的行为,其中更改键 A 的值会影响键 B 的值,那么您必须创建一个包装对象并使用字段。
就像是:
class Pointer<T> {
private T t;
public Pointer(T t) {
set(t);
}
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
...
Map<String, Pointer> map = new HashMap<>();
Pointer<Integer> ptr = new Pointer<>(5);
map.put("A", ptr);
map.put("B", ptr);
System.out.println(map.get("A").get());
System.out.println(map.get("B").get());
ptr.set(25);
System.out.println(map.get("A").get());
System.out.println(map.get("B").get());
如果您想要其他东西,您可能需要详细说明或考虑其他数据结构。
添加回答
举报