2009-12-17 14 views
21

chciałbym zrobić coś takiego:Java: ArrayList sznurka tablic

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

... to nie wydają się działać. Jaki jest najłatwiejszy sposób przechowywania wielu adresów z 3 polami na adres w tablicy bez tworzenia dla niej osobnej klasy?

+5

dlaczego nie ma osobną klasę? – r3zn1k

+1

Ostatecznie proponuję osobną klasę, jeśli ten kod ma trwać. Być może interesuje Cię zapach kodu opisany jako "Pierwotna obsesja". – Grundlefleck

+2

Dziękuję wszystkim za doskonałe odpowiedzi. Sądzę, że powinienem zaakceptować, że lepiej jest użyć do tego oddzielnej klasy. – Johan

Odpowiedz

42

Użyj drugiej ArrayList dla 3 ciągów, a nie prymitywnej tablicy. To znaczy.
private List<List<String>> addresses = new ArrayList<List<String>>();

Wtedy można mieć:

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

addresses.add(singleAddress); 

(myślę, że jakieś dziwne rzeczy mogą się zdarzyć z typu skasowaniem tutaj, ale nie sądzę, powinna ona znaczenia tutaj)

Jeśli” Ponownie ustawiona na użycie prymitywnej tablicy, wymagana jest tylko niewielka zmiana, aby twój przykład zadziałał. Jak wyjaśniono w innych odpowiedziach, rozmiar tablicy nie może być zawarty w deklaracji. Więc zmiana:

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

do

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

zadziała.

10

Nie użyłbym tablic. Są problematyczne z kilku powodów i nie możesz ich zadeklarować pod względem konkretnego rozmiaru tablicy. Wypróbuj:

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

Ale szczerze mówiąc, dla adresów, stworzyłem klasę, która je modeluje.

Jeśli było używać tablic byłoby:

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

czyli nie można deklarować rozmiar tablicy.

Na koniec, nie deklaruj typów jako konkretne typy w takich przypadkach (np. Dla addresses). Użyj interfejsu, tak jak to zrobiłem powyżej. Dotyczy to zmiennych składowych, typów zwrotu i typów parametrów.

5

Nie można wymusić, aby tablice String miały określony rozmiar. Można to zrobić:

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

ale tablicą dowolnej wielkości można dodać do tej listy.

Jednak, jak wspomnieli inni, właściwym rozwiązaniem jest utworzenie oddzielnej klasy reprezentującej adresy. Wtedy masz coś takiego:

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[]>(); 

to zadziała defenitely ...

1

spróbować tej

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

Proste i prosty sposób na tworzenie ArrayList String

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

Cheers