2012-05-01 38 views
12

Potrzebuję czegoś w rodzaju 3-wymiarowego (jak lista lub mapa), które wypełniam 2 ciągami i liczbą całkowitą w pętli. Ale niestety nie wiem, jakiej struktury danych użyć i jak.3-wymiarowa lista lub mapa

// something like a 3-dimensional myData 
for (int i = 0; i < 10; i++) { 
    myData.add("abc", "def", 123); 
} 
+0

Jaki jest związek między tymi trzema wartościami? – Attila

+0

Przychodzą one dynamicznie z JTextFields i JButtons. – user1170330

+0

Dobrze, ale czy chcesz z nimi zrobić _? – Attila

Odpowiedz

18

Utwórz obiekt, która zamyka trzy razem i dodać je do tablicy lub listy:

public class Foo { 
    private String s1; 
    private String s2; 
    private int v3; 
    // ctors, getters, etc. 
} 

List<Foo> foos = new ArrayList<Foo>(); 
for (int i = 0; i < 10; ++i) { 
    foos.add(new Foo("abc", "def", 123); 
} 

Jeśli chcesz wstawić do bazy danych , napisz klasę DAO:

public interface FooDao { 
    void save(Foo foo);  
} 

W razie potrzeby zaimplementuj za pomocą JDBC.

+0

Potrzebuję podobnej klasy "pojemnik" do przechowywania dokładnie trzech właściwości. Inicjuję te właściwości za pomocą konstruktora i muszę mieć dostęp do każdej właściwości osobno. Klasa nie ma żadnej logiki, tylko te trzy właściwości i konstruktor. Jaki jest najlepszy sposób uzyskania dostępu do tych nieruchomości? Czy w takim przypadku ustawienie właściwości jako publicznej jest poprawne, czy powinienem napisać gettery? Właściwości są ostateczne. – kazy

+1

OK? Kto cię powstrzyma?Uczyń je publicznie ostatecznymi; są niezmienne w ten sposób. Oczekuj, że policja OO puka. – duffymo

+0

Pytam, czy to jest w porządku, ponieważ nie chcę kodować czegoś, co jest sprzeczne z koncepcjami OO. Z twojej odpowiedzi zakładam, że ostateczne właściwości nie wymagają ściągania, ponieważ i tak nie można ich zmienić? Czy też "ostateczna opinia publiczna" jest w porządku tylko w przypadku tej małej sprawy? – kazy

2

Wystarczy utworzyć klasę

class Data{ 
    String first; 
    String second; 
    int number; 
} 
1

Odpowiedź zależy od tego, jaka jest zależność między wartościami.

1) po prostu chcesz przechowywać wszystkie trzy w tej samej kolejności, w jakiej się znajdują: utwórz niestandardową klasę obejmującą wszystkie trzy elementy i dodaj instancję tej klasy do List<MyData>.

2) chcesz skojarzyć pierwszy ciąg z danymi drugiego i trzeciego (i powiązać drugi z int): utwórz mapę> i dodaj elementy do niej (będziesz musiał utworzyć wewnętrzną mapę dla każdego nowego pierwszego ciągu)

3) nie chcesz zachować duplikatów, ale nie chcesz/potrzebujesz mapy .: Utwórz niestandardowy typ (a'la 1)) i umieść je w Set<MyData>

3) mix-a mecz

9

kod Google za Guava będzie wyglądać następująco:

import com.google.common.collect.Table; 
import com.google.common.collect.HashBasedTable; 

Table<String, String, Integer> table = HashBasedTable.create(); 

for (int i = 0; i < 10; i++) { 
    table.put("abc", "def", i); 
} 

Kod powyżej wybuduje HashMap wewnątrz HashMap z konstruktora, który wygląda tak:

Table<String, String, Integer> table = Tables.newCustomTable(
     Maps.<String, Map<String, Integer>>newHashMap(), 
     new Supplier<Map<String, Integer>>() { 
    @Override 
    public Map<String, Integer> get() { 
     return Maps.newHashMap(); 
    } 
}); 

W przypadku, gdy chcesz zastąpić struktury bazowe można łatwo zmienić.

-1

Możesz przejść z tym kodem!

public class List3D { 

    public static class MyList { 
     String a = null; 
     String b = null; 
     String c = null; 

     MyList(String a, String b, String c) { 
      this.a = a; 
      this.b = b; 
      this.c = c; 
     } 
    } 

    public static void main(String[] args) { 

     List<MyList> myLists = new ArrayList<>(); 
     myLists.add(new MyList("anshul0", "is", "good")); 
     myLists.add(new MyList("anshul1", "is", "good")); 
     myLists.add(new MyList("anshul2", "is", "good")); 
     myLists.add(new MyList("anshul3", "is", "good")); 
     myLists.add(new MyList("anshul4", "is", "good")); 
     myLists.add(new MyList("anshul5", "is", "good")); 

     for (MyList myLista : myLists) 
      System.out.println(myLista.a + myLista.b + myLista.c); 
    } 
}