2010-04-10 52 views
4

我需要一個HashSet實現,其中的元素是一個整數
例如。 Set s = { {1,2} , {3,4} , {1,4}}。這裏的集合有3個元素。兩個關鍵HashSet?

這種兩個關鍵的HashSet在很多情況下都是需要的,比如我在我的數據庫中有一個關係,候選關鍵字是兩列的組合。
是否有一些庫已經提供了這個? 如果沒有這樣的實現可用,那麼從頭開始實現整個數據結構,是否會更容易(並且更高效?)在Java中擴展HashSet實現?

+0

由於Adamski提出的觀點,使用'HashSet '沒有幫助。因此,創建了一個數據持有者的整數列表,並提供了equals和hashcode實現。 – athena 2010-04-13 11:36:33

回答

8

對於這個要求,我會創建一個數據持有者與2個整數作爲屬性,並提供equals和hashcode實現。然後把這些對象放在Set中。

1

將它作爲一個成員的2個元素放置數組?即:

Set<int[]> s = new HashSet<int[]>(); 
s.add(new int[] {1,2}); 
s.add(new int[] {3,4}); 

或創建一個類CandidateKey其中有兩個字段和一個自定義equals()hashCode()方法?

這一切都說,你確定要自己處理對象關係映射(從數據庫到對象的映射),而不是像Hibernate或EclipseLink這樣的庫?

+2

這實際上工作嗎?我會認爲數組的默認equals和hashCode實現是基於身份的。 – Adamski 2010-04-10 10:34:20

+0

他們是,但在某些情況下,這可能就足夠了 - 我不知道他是否是這樣。這就是爲什麼要添加關於一個新類的建議,其中equals和hashcode正確執行。 – Bozho 2010-04-10 10:39:44

+0

擬議的int []解決方案有一個限制。沒有什麼能夠阻止你添加包含更少或更多元素的數組,例如int [] empty = new int [0];或者int [] triple = new int [] {1,2,3} ;. – matsev 2010-04-10 15:12:36