2012-04-05 44 views
3

我期待實現一個數據結構,可以添加/呈現有序的一對值。例如。獲取有序的值對

orderedPair.add(value1, text1) 
orderedPair.add(value1, text2) 
orderedPair.add(value2, text3, data1) 
orderedPair.add(value2, data2) 
orderedPair.add(value1, text5) 

當我得到的,我希望它作爲迭代返回

value1, text1 
value1, text2 
value2, text3, data1 and so on. 

LinkedHashMaps或包含HashMap的任何變種,因爲它們只返回基於關鍵是我想獲得的價值和不工作是價值,價值對。請注意,值/文本或數據都不是唯一的,我可能無法基於任何鍵獲取它。另外,我不想要一個排序列表,我確實只需要一個ORDERED列表。

問題是:在Java中是否有任何數據結構可用於完成此操作?

我沒有遇到任何服務於此目的。在這種情況下,我正在考慮編寫一個可以實現這一點的自定義集合。歡迎任何建議/幫助。

+0

另外,我試圖避免使用二維數組 – conphident4 2012-04-05 22:49:37

+0

我可能會誤解這個問題:爲什麼不只是'List '適合?其中'Tuple'是你定義的類,它包含相關的元素類型? – amit 2012-04-05 22:51:00

+0

謝謝阿米特的迴應..是不是像你的意思是2或3值的類?例如。 OrderedPair {String s1;字符串s2; int i1;}但是那麼我會不必實現/重寫列表的所有方法嗎? – conphident4 2012-04-05 23:02:27

回答

2

結束語在評論中討論到的答案,因爲它似乎是在OP有用:

創建class Tuple,這將是你對/三。
請注意,此類可以使用固定數量的參數或作爲容納對象列表的容器來實現。

將這些Tuple對象放在List<Tuple>中,然後就完成了。

您還可以實現hashCode()equals()並使其實現Comparable這個類 - 你將能夠與其他收藏品,如TreeSetHashSet使用它。

+0

btw這是我最喜歡的[Tuple實現](https://github.com/ripper234/Basic/tree/master/java/src/main/java/org/basic/datastructures/tuple)... [tests] (https://github.com/ripper234/Basic/blob/master/java/src/test/java/org/basic/datastructures/tuple/TupleTester。java) – 2012-04-05 23:18:57

0

只需使用一個映射列出,像樹圖

Map<Integer, List<Integer>> content = new Treemap<Integer, List<Integer>>(); 

if (not content.containsKey(value1)) { 
    content.put(value1, new LinkedList<Integer>()); 
} 
content.get(value1).add(text1) 

這將是功能orderedPair.add

然後輸出,遍歷地圖和每個條目,寫出來的每個項目相應的列表

由於您希望對它進行排序,請將比較器傳遞給Treemap構造函數。

+0

請注意,它是'Map '而不是'Map '[TreeMap'也一樣]。你在找一個'Set '嗎? – amit 2012-04-05 23:14:04

+0

@amit:謝謝。也許現在更清楚了? – j13r 2012-04-06 00:02:00