3 回答

TA貢獻1880條經驗 獲得超4個贊
Java HashMap 存儲對對象的引用。如果您使用兩個不同的鍵存儲相同的對象,則鍵將指向相同的值。
但這不是你的問題。您的問題是您使用的是 Float 值,而 Float 是一種不可變的數據類型。一旦它被創(chuàng)建,你就不能改變它的價值。要實現您想要做的事情,您需要創(chuàng)建一個可變的 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 的值,那么您必須創(chuàng)建一個包裝對象并使用字段。
就像是:
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());
如果您想要其他東西,您可能需要詳細說明或考慮其他數據結構。
添加回答
舉報