2012-04-19 24 views
8

如何在java中存儲一組配對數字?我是否使用列表或數組或其他東西?在java中存儲數字對

例如。 [(1,1),(2,1),(3,5)]

+1

您可以使用所有上述情況,但沒有從你所說的話猜測的方式。 – 2012-04-19 18:31:40

+0

@Erwald:使用'[desc](鏈接)'發表評論中的鏈接 – amit 2012-04-19 18:32:19

+0

@Erwald它的一個解決方案,但它可能不是什麼OP最好的。 – 2012-04-19 18:32:40

回答

8

有幾個選項:

編寫自定義IntPair類

class IntPair { 
    // Ideally, name the class after whatever you're actually using 
    // the int pairs *for.* 
    final int x; 
    final int y; 
    IntPair(int x, int y) {this.x=x;this.y=y;} 
    // depending on your use case, equals? hashCode? More methods? 
} 

,然後創建一個IntPair[]List<IntPair>

可替換地,創建一個二維陣列new int[n][2],和治療的行作爲對。

Java沒有內置Pair類的幾個原因,但最引人注目的是,它很容易寫出具有相同功能的類,但更多的啓發,有幫助的名字班級,領域和方法。

如果我們知道更多關於您實際使用的內容,我們可能會提供更詳細的建議 - 對於我們所知的一切,Map可能適用於此。

+0

我有一個二維數組的字符。我想單獨存儲某些位置。幫助? – saviok 2012-04-19 18:58:00

+0

你在二維數組中存儲位置嗎? (在這種情況下,我上面概述的選項可能是最好的選項。) – 2012-04-19 19:01:57

+0

其實問題是如何存儲職位? – saviok 2012-04-19 19:04:58

0
class Pair<T> { 
    T p1, p2; 
    Pair(T p1, T p2) { 
     this.p1 = p1; 
     this.p2 = p2; 
    } 

Pair<Integer> pair = new Pair<Integer>(1,2); 

int i1 = pair.p1; 
int i2 = pair.p2; 

你也可以把干將,制定者,等於,哈希碼等

+2

我會做'p1',''p2'私人final'也覆蓋'的equals()'和' hashCode()' – amit 2012-04-19 18:34:49

+0

@amit:好點。我在代碼後添加了一條評論。 – 2012-04-19 18:40:39

0

如果你可以用低一級的結構和生活迫切需要的「設置對」「文字」形式緊湊的形式 - 這發生在我身上的單元測試,當我需要一組固定的 - 你可以簡單地使用數組的數組:

int[][] squares = { 
    { 1, 1 }, 
    { 2, 4 }, 
    { 3, 9 } 
}; 

但請記住,沒有語義這種類型 - 這一切都取決於正確使用,編譯器不會給你一個警告,如果你鍵入squares[0][1]你真時想要squares[1][0]

0

如果你需要避免重複再一個HashSet將是一個不錯的選擇,但它不是那麼一個ArrayList是可行的。

Class IntPair(){ 
    int i; 
    int j; 
} 
HashSet<IntPair> set = new HashSet<IntPair>(); 

ArrayList<IntPair> list = new ArrayList<IntPair>(); 
+0

如果你想避免重複,你還需要重寫equals和hashCode。 http://stackoverflow.com/a/7520464/3215004 – gmatht 2015-09-16 06:37:27