[英]java ConcurrentHashMap with constructor as key
我目前正在嘗試用 java lwjgl/OpenGL 編寫一個小游戲。
運行代碼時,我從某些 ConcurrentHashMap 讀取時得到值 NULL。 我寫了一個簡單的程序來重現同樣的問題,果然,我可以。
讓我向您展示代碼: 該程序由三個類組成。 主類:
package main;
public class Main {
private MapContainer con = new MapContainer();
public static void main(String[] args) {
new Main();
}
public Main() {
ValueContainer vc = new ValueContainer(1, 2, 3);
this.con.set(vc, "Just a String");
System.out.println(this.con.get(vc));
}
}
然后是MapContainer類。 它基本上是一個包含 ConcurrentHashMap 和兩個訪問它的方法的類:
package main;
import java.util.concurrent.ConcurrentHashMap;
public class MapContainer {
private ConcurrentHashMap<ValueContainer, String> map = new ConcurrentHashMap<>();
public void set(ValueContainer key, String value) {
this.map.put(key, value);
}
public String get(ValueContainer key) {
return this.map.get(key);
}
}
最后,還有ValueContainer 。 這個類只包含三個整數 x、y 和 z,以及一個用於設置這些值的構造函數。
package main;
public class ValueContainer {
public ValueContainer(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
public int x, y, z;
}
因此,當我運行主類時,我創建了一個新的 ValueContainer,其值為 1、2、3,並將其與字符串“Just a String”一起放入地圖容器中。 然后我用那個確切的值容器讀取字符串並將其打印出來。 果然程序可以工作,我在控制台中打印了“只是一個字符串”。
所以現在是我的游戲:在我的游戲中,我必須訪問一個類似的 ConcurrentHashMap,但我不能使用相同的 ValueContainer 來訪問 String,但我必須使用new ValueContainer(1, 2, 3);
創建一個新的new ValueContainer(1, 2, 3);
所以顯然 ConcurrentHashMap 不能返回“Just a String”,因為它不是同一個 ValueContainer,所以它給出了 NULL。 這是帶有這個小修改的Main類的代碼:
package main;
public class Main {
private MapContainer con = new MapContainer();
public static void main(String[] args) {
new Main();
}
public Main() {
this.con.set(new ValueContainer(1, 2, 3), "Just a String");
System.out.println(this.con.get(new ValueContainer(1, 2, 3)));
}
}
現在我的問題:
有什么方法可以讓我在第二個主類中使用該版本,但沒有問題,以便我在控制台中打印出“只是一個字符串”?
謝謝你。
是的,很簡單。
您必須在ValueContainer
類中覆蓋Object.hashCode()
和Object.equals()
兩個方法。
請查看添加這兩種方法的 API 文檔。 應用程序接口
也許您使用像 Ecplise 或 IntelliJ 這樣的 IDE,它可以幫助您了解細節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.