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)]
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)]
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
.
Mam tablicę 2D postaci.I chcę przechowywać określone stanowiska osobno. Pomaga? – saviok
Czy przechowujesz pozycje w tablicy 2D? (W takim przypadku opcje, które przedstawiłem powyżej, są prawdopodobnie najlepszymi dostępnymi wersjami). –
Właściwie pytanie dotyczyło sposobu przechowywania pozycji? – saviok
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
Zrobiłbym 'p1',' p2' 'prywatny finał', a także nadpisał' equals() 'i' hashCode() ' – amit
@amit: Dobre punkty. Dodałem komentarz po kodzie. –
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]
.
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>();
Jeśli chcesz uniknąć duplikatów, będziesz musiał także przesłonić równe i hashCode. http://stackoverflow.com/a/7520464/3215004 – gmatht
Można użyć wszystkich wyżej wymienionych, ale nie ma sposobu, zgadywania od tego, co pan powiedział. –
@Erwald: użyj '[opis] (link)', aby opublikować link w komentarzach – amit
@Erwald To jedno rozwiązanie, ale może nie być najlepsze dla tego, co robi OP. –