13 Stimmen

3-Dimensionen Liste oder Karte

Ich brauche so etwas wie eine 3-Dimension (wie eine Liste oder eine Karte), die ich mit 2 Strings und einem Integer innerhalb einer Schleife fülle. Aber leider weiß ich nicht, welche Datenstruktur ich verwenden soll und wie.

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

20voto

duffymo Punkte 298898

Erstellen Sie ein Objekt, das die drei Elemente zusammen kapselt, und fügen Sie sie zu einem Array oder einer Liste hinzu:

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);
}

Wenn Sie in eine Datenbank einfügen wollen, schreiben Sie eine DAO-Klasse:

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

Implementierung nach Bedarf mit JDBC.

15voto

Tombart Punkte 27954

A Google's Guave würde der Code wie folgt aussehen:

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);
}

Der obige Code konstruiert eine HashMap innerhalb einer HashMap mit einem Konstruktor, der wie folgt aussieht:

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();
    }
});

Falls Sie die zugrundeliegenden Strukturen außer Kraft setzen wollen, können Sie sie leicht ändern.

5voto

UmNyobe Punkte 21934

Erstellen Sie einfach eine Klasse

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

1voto

Attila Punkte 27065

Die Antwort hängt davon ab, in welchem Verhältnis die Werte zueinander stehen.

1) Sie möchten einfach alle drei Elemente in der gleichen Reihenfolge speichern: Erstellen Sie eine benutzerdefinierte Klasse, die alle drei Elemente umfasst, und fügen Sie eine Instanz dieser Klasse zu einer List<MyData> .

2) Sie möchten den ersten String mit den zweiten und dritten Daten verknüpfen (und den zweiten mit dem int): Erstellen Sie eine Map> und fügen Sie die Elemente hinzu (Sie müssen die innere Map für jeden neuen ersten String erstellen)

3) Sie wollen keine Duplikate behalten, aber Sie wollen/brauchen keine Karte..: Erstellen Sie einen benutzerdefinierten Typ (a'la 1)) und legen Sie sie in einem Set<MyData>

3) mix-and-match

1voto

Lucian Bacila Punkte 13

Für die synchronisierte Struktur können Sie Tables.synchronizedTable von Guave 22 oder später.

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

Um ein Element in die Sammlung aufzunehmen, können Sie Folgendes tun:

table.put("abc", "def", 123);

Um das Element aus der Sammlung zu entfernen:

table.remove("abc", "def");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X