2009-12-17 28 views
21

me gustaría hacer algo como esto:Java: ArrayList de Cuerda en matrices

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

... esto no parece funcionar. ¿Cuál es la forma más fácil de almacenar múltiples direcciones con 3 campos por dirección en una matriz sin crear una clase separada para ella?

+5

por qué hay una clase separada? – r3zn1k

+1

En última instancia, sugeriría una clase separada si este código es para durar. Puede que le interese un olor codificado que se describe como "Obsesión primitiva". – Grundlefleck

+2

Gracias a todos por sus excelentes respuestas, creo que debería aceptar que es mejor usar una clase separada para esto. – Johan

Respuesta

42

Usa una segunda ArrayList para las 3 cuerdas, no una matriz primitiva. Es decir.
private List<List<String>> addresses = new ArrayList<List<String>>();

, entonces puede tener:

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

addresses.add(singleAddress); 

(creo que algunas cosas extrañas pueden suceder con el tipo de borrado de aquí, pero no creo que debería importar aquí)

Si' re dead set on usando una matriz primitiva, solo se requiere un cambio menor para que su ejemplo funcione. Como se explica en otras respuestas, el tamaño de la matriz no se puede incluir en la declaración. Por lo que cambiar:

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

a

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

va a funcionar.

10

No utilizaría matrices. Son problemáticos por varias razones y, de todos modos, no se puede declarar en términos de un tamaño de matriz específico. Pruebe:

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

Pero, sinceramente, para las direcciones, crearía una clase para modelarlas.

Si se va a utilizar matrices sería:

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

es decir, no se puede declarar el tamaño de la matriz.

Por último, no declare sus tipos como tipos concretos en casos como este (es decir, para addresses). Use la interfaz como lo hice arriba. Esto se aplica a las variables miembro, tipos de retorno y tipos de parámetros.

5

No puede forzar las matrices de cadenas para que tengan un tamaño específico. Usted puede hacer esto:

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

, pero una serie de cualquier tamaño se puede añadir a esta lista.

Sin embargo, como han mencionado otros, lo correcto es crear una clase separada que represente las direcciones. De allí tendría que tener algo como:

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

esto funcionará defenitely ...

1

probar esto

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

manera simple y directa para crear ArrayList de cadena

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

Saludos