2009-12-17 12 views
21

Ich möchte so etwas wie dies tun:Java: Arraylist von String-Arrays

private ArrayList<String[]> addresses = new ArrayList<String[3]>(); 

... dies nicht zu funktionieren scheint. Was ist der einfachste Weg, mehrere Adressen mit 3 Feldern pro Adresse in einem Array zu speichern, ohne dafür eine separate Klasse zu erstellen?

+5

warum keine eigenen Klasse zu erstellen? – r3zn1k

+1

Schließlich würde ich eine separate Klasse vorschlagen, wenn dieser Code dauern soll. Möglicherweise interessiert dich ein Code-Geruch, der als "primitive Besessenheit" beschrieben wird. – Grundlefleck

+2

Vielen Dank für Ihre ausgezeichneten Antworten, ich denke, ich sollte einfach akzeptieren, dass es besser ist, eine separate Klasse dafür zu verwenden. – Johan

Antwort

42

Verwenden Sie eine zweite ArrayList für die 3 Strings, kein primitives Array. Ie.
private List<List<String>> addresses = new ArrayList<List<String>>();

Dann können Sie haben:

ArrayList<String> singleAddress = new ArrayList<String>(); 
singleAddress.add("17 Fake Street"); 
singleAddress.add("Phoney town"); 
singleAddress.add("Makebelieveland"); 

addresses.add(singleAddress); 

(Ich denke, einige seltsame Dinge mit Typ Löschung hier passieren kann, aber ich glaube nicht, dass es hier egal)

Wenn Sie‘ re dead setzt ein primitives Array ein, nur eine kleine Änderung ist nötig, damit das Beispiel funktioniert. Wie in anderen Antworten erläutert, kann die Größe des Arrays nicht in der Deklaration enthalten sein. So verändert sich:

private ArrayList<String[]> addresses = new ArrayList<String[3]>(); 

zu

private ArrayList<String[]> addresses = new ArrayList<String[]>(); 

arbeiten.

10

Ich würde keine Arrays verwenden. Sie sind aus mehreren Gründen problematisch, und Sie können sie trotzdem nicht mit einer bestimmten Array-Größe deklarieren. Versuchen Sie:

List<List<String>> addresses = new ArrayList<List<String>>(); 

Aber ehrlich gesagt für Adressen, würde ich eine Klasse erstellen, um sie zu modellieren.

Wenn Sie Arrays verwenden wären, würde es sein:

List<String[]> addresses = new ArrayList<String[]>(); 

dh Sie nicht die Größe des Arrays deklarieren können.

Schließlich deklarieren Sie Ihre Typen nicht als konkrete Typen in solchen Fällen (zB für addresses). Benutze das Interface wie oben beschrieben. Dies gilt für Elementvariablen, Rückgabetypen und Parametertypen.

5

Sie können nicht erzwingen, dass die String-Arrays eine bestimmte Größe haben. Sie können dies tun:

private List<String[]> addresses = new ArrayList<String[]>(); 

aber eine Reihe von jeder Größe können zu dieser Liste hinzugefügt werden.

Wie jedoch andere erwähnt haben, ist die korrekte Vorgehensweise, eine separate Klasse für Adressen zu erstellen. Dann würden Sie so etwas wie:

private List<Address> addresses = new ArrayList<Address>(); 
21
List<String[]> addresses = new ArrayList<String[]>(); 
String[] addressesArr = new String[3]; 

addressesArr[0] = "zero"; 
addressesArr[1] = "one"; 
addressesArr[2] = "two"; 

addresses.add(addressesArr); 
1
private List<String[]> addresses = new ArrayList<String[]>(); 

diese defenitely funktioniert ...

1

versuchen, diesen

ArrayList<ArrayList<String>> PriceModelList = new ArrayList<>(); 
    ArrayList<ArrayList<String>> PriceQtyList = new ArrayList<>(); 
    ArrayList<ArrayList<String>> PriceTotalList = new ArrayList<>(); 

    for (int i = 0; i < CustomerNames.length; i++) { 
     PriceModelList.add(new ArrayList<String>()); 
     String[] PriceModel = {"s6", "s7", "note4", "note5", "j5", "j6"}; 
     for (int j = 0; j < PriceModel.length; j++) { 
      PriceModelList.get(i).add(PriceModel[j]); 
     } 

     PriceQtyList.add(new ArrayList<String>()); 
     String[] PriceQut = {"12", "13", "21", "15", "43", "21"}; 
     for (int k = 0; k < PriceQut.length; k++) { 
      PriceQtyList.get(i).add(PriceQut[k]); 
     } 

     PriceTotalList.add(new ArrayList<String>()); 
     String[] PriceTotal = {"1323", "1312321", "43123212", "43434", "12312", "43322"}; 
     for (int m = 0; m < PriceTotal.length; m++) { 
      PriceTotalList.get(i).add(PriceTotal[m]); 
     } 
    } 

    ArrayList<ArrayList<ArrayList<String>>> CustomersShoppingLists = new ArrayList<>(); 
    CustomersShoppingLists.add(PriceModelList); 
    CustomersShoppingLists.add(PriceQtyList); 
    CustomersShoppingLists.add(PriceTotalList); 
2

einfach und geradlinig Weg Arraylist mit String

List<String> category = Arrays.asList("everton", "liverpool", "swansea", "chelsea"); 

Prost