Frage

Ich bin für die Arbeit mit PHP verwendet, aber in letzter Zeit habe ich mit Java gearbeitet, und ich bin mit Kopfschmerzen versuchen, um dies herauszufinden. Ich mag diese Darstellung in Java speichern:

Array ( 
        ["col_name_1"] => Array ( 
                               1 => ["col_value_1"], 
                               2 => ["col_value_2"], 
                               ... , 
                               n => ["col_value_n"] 
                          ),
        ["col_name_n"] => Array ( 
                               1 => ["col_value_1"], 
                               2 => ["col_value_2"], 
                               ... , 
                               n => ["col_value_n"] 
                          )
)

Gibt es eine saubere Art und Weise (das heißt kein schmutziger Code) dieses Ding in Java zu retten? Hinweis; Ich mag Strings als Array-Indizes verwenden (in der ersten Dimension) und ich weiß nicht, die bestimmte Größe der Arrays ..

War es hilfreich?

Lösung

Sie können eine Karte verwenden und eine Liste (diese beiden Schnittstellen in mehr als einer Weise implementiert sind für Sie die am besten geeignete in Ihrem Fall zu wählen).

Für weitere Informationen überprüfen Sie die Anleitungen für Karte und Liste und vielleicht sollten Sie mit der Sammlungen Tutorial.

Ein Beispiel:

import java.util.*;

public class Foo {
    public static void main(String[] args) {
        Map<String, List<String>> m = new HashMap<String, List<String>>();
        List<String> l = new LinkedList<String>();
        l.add("col_value_1");
        l.add("col_value_2");
        //and so on
        m.put("col_name_1",l); //repeat for the rest of the colnames

       //then, to get it you do

       List<String> rl = m.get("col_name_1");

    }
}

Andere Tipps

Versuchen Sie, eine Map<String, List<String>> verwenden. Dies ermöglicht Ihnen, Strings als Schlüssel / Indizes in die äußere Karte zu verwenden, und ein Ergebnis ist eine Liste von Strings als Werte zu erhalten. Sie werden wahrscheinlich eine HashMap für die äußere Karte und ArrayList der für die inneren Listen verwendet werden soll.

Wenn Sie etwas sauberen Code wollen, die dem PHP Sie es zu initialisieren gab ähnlich ist, können Sie etwas tun:

Map<String, List<String>> columns = new HashMap<String, List<String>>() {{
    put("col_name_1", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
    put("col_name_2", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
    put("col_name_n", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
}};

Sie möchten ein Karte , die von gerade über alles eingegeben werden. HashMap Arbeit in den meisten Fällen .

So etwas wie dies.

List<String> col1Vals = new java.util.ArrayList<String>();
col1Vals.add("col_value_1");
col1Vals.add("col_value_2");
Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put("col_name_1", col1Vals);

Wenn Sie etwas einfacher, die commons-lang Bibliothek hat eine MultiMap .

seien Sie gewarnt, dass die Vector ist Legacy-Code für die Kollektionen Rahmen. Er synchronisiert Zugriff auf seine Elemente, die Leistung verlangsamt. Die meisten Anwendungsfälle für Liste mit bekannten diese Art von Thread-Sicherheit nicht benötigen, und selbst wenn man es täte, würde ich eher geneigt sein, die CopyOnWriteArrayList .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top