2012-04-19 13 views
8

Jak zapisać zestaw sparowanych liczb w java? Czy używam list lub tablic, czy może czegoś innego?Przechowywanie par liczb w java

np. [(1,1), (2,1), (3,5)]

+1

Można użyć wszystkich wyżej wymienionych, ale nie ma sposobu, zgadywania od tego, co pan powiedział. –

+0

@Erwald: użyj '[opis] (link)', aby opublikować link w komentarzach – amit

+0

@Erwald To jedno rozwiązanie, ale może nie być najlepsze dla tego, co robi OP. –

Odpowiedz

8

Istnieje kilka możliwości :

Napisz niestandardowej klasy 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? 
} 

a następnie utworzyć IntPair[] lub List<IntPair>.

Alternatywnie utwórz dwuwymiarową tablicę new int[n][2] i traktuj wiersze jako pary.

Java nie posiada wbudowany Pair klasy z kilku powodów, ale najbardziej zauważalne jest to, że dość łatwo napisać klasę, która ma taką samą funkcję, ale ma dużo bardziej pouczające pomocnych nazwy klasa, jej pola i metody.

Jeśli dowiedzieliśmy się więcej na temat tego, czego faktycznie używasz, być może będziemy w stanie dostarczyć bardziej szczegółowe sugestie - z tego, co wiemy, odpowiednie może być tutaj Map.

+0

Mam tablicę 2D postaci.I chcę przechowywać określone stanowiska osobno. Pomaga? – saviok

+0

Czy przechowujesz pozycje w tablicy 2D? (W takim przypadku opcje, które przedstawiłem powyżej, są prawdopodobnie najlepszymi dostępnymi wersjami). –

+0

Właściwie pytanie dotyczyło sposobu przechowywania pozycji? – saviok

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; 

Można również umieścić w pobierające, ustawiające, równymi hashcode itp

+2

Zrobiłbym 'p1',' p2' 'prywatny finał', a także nadpisał' equals() 'i' hashCode() ' – amit

+0

@amit: Dobre punkty. Dodałem komentarz po kodzie. –

0

Jeśli możesz żyć z niskimi poziomami struktur i rozpaczliwie potrzebujesz kompaktowej formy "dosłownej" formy "zestawu par" - zdarza mi się to w teście jednostkowym, kiedy potrzebuję zestawu urządzeń - możesz po prostu używać tablicy tablic:

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

należy jednak pamiętać, że nie ma semantyczny do tego typu - to wszystko zależy od właściwego użytkowania, kompilator nie daje ostrzeżenie, jeśli wpiszesz squares[0][1] kiedy naprawdę poszukiwany squares[1][0].

0

Jeśli chcesz uniknąć duplikatów, to HashSet będzie dobrym wyborem, ale nie będzie działał ArrayList.

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

lub

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

Jeśli chcesz uniknąć duplikatów, będziesz musiał także przesłonić równe i hashCode. http://stackoverflow.com/a/7520464/3215004 – gmatht

Powiązane problemy