舉一個簡單的個人練習,我要做到以下幾點:爪哇 - 對象池相同的參考
- 創建一個類,它代表
- 這個類的沒有兩個對象一個整數值與相同的整數值應該在任何時刻存在時間
這是我如何處理這個問題:
public class MyClass {
// Static pool
private static HashSet<MyClass> pool;
// Integer value each object holds
private int value;
static {
pool = new HashSet<MyClass>();
}
// private Constructor
private MyClass(int value) {
this.value = value;
}
// Static public method to create MyClass objects
public MyClass create(int value) {
// Create tmp object with private constructor
MyClass tmp = new MyClass(value);
// At this point I want to check, whether an object with the
// same integer value exists in the HashSet.
// If this is the case I would like to return a reference to
// the object in the HashSet (the GC will remove tmp).
// Otherwise I would like to add tmp to the HashSet and return
// a reference to tmp.
}
}
問題的一部分是作爲上述代碼中評論的一部分編寫的。我很好奇以下事情。如果我不覆蓋equals(Object obj)
,pool.contains(tmp)
將始終返回false(因爲從Object
繼承的默認equals(Object obj)
作爲參考測試,我可以覆蓋equals(Object obj)
以比較對象的value
-字段,但是如何從HashSet中獲取引用??回到它
我需要做hashcode()
任何理由不使用'地圖<整數,MyClass的>'? – Amit