2012-03-03 16 views
6

sé que para las matrices puede agregar un elemento en una matriz bidimensional de esta manera:elemento de adición en dos dimensiones ArrayList

array[0][1] = 17; //just an example 

¿Cómo puedo hacer lo mismo con ArrayList?

+0

@Joey: ¿qué dudas? Por favor vea el código en la respuesta ya que usa get (...). Get (...). ¿Cómo esto no permite mi comentario anterior? –

+1

Sea cual sea el resultado de 'get (1)', asignarle 17 no lo agregará a la Lista, y seguramente no se compilará de todos modos. – DNA

+1

@Joey: Sí, tienes razón y no estaba pensando. No debe haber suficiente sangre en mi sistema de alcohol en este momento. –

Respuesta

6
myList.get(0).set(1, 17); 

¿quizás?

Esto supone un anidado ArrayList, es decir

ArrayList<ArrayList<Integer>> myList; 

Y para recoger en su elección de palabras: Esta asigna un valor a un lugar específico en la lista interna, no añadir uno . Pero también lo hace su ejemplo de código, ya que las matrices tienen un tamaño fijo, por lo que debe crearlas en el tamaño correcto y luego asignar valores a las ranuras de elementos individuales.

Si realmente desea añadir un elemento, entonces por supuesto que es .add(17), pero eso no es lo que hizo su código, así que fui con el código de seguridad.

+1

Estoy tan contento de que James Gosling haya despreciado las sobrecargas del operador. –

+2

... donde get (0) devuelve una lista, por supuesto. También observando que 17 está autoboxado a 'nuevo entero (17)' – DNA

1
outerList.get(0).set(1, 17); 

con outerList ser un List<List<Integer>>.

Recuerde que las matrices bidimensionales no existen. De hecho, son matrices o matrices.

1
ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>(); 
data.add(new ArrayList<String>()); 
data.get(0).add("String"); 

ArrayList<ArrayList<String>> contiene elementos de tipo ArrayList<String>

Cada elemento debe ser inicializado

Estos elementos contienen elementos de tipo String

Para conseguir de nuevo la String "cadena" en la línea 3 ejemplo, usaría

String getValue = data.get(0).get(0); 
1
ArrayList<ArrayList<Integer>> FLCP = new ArrayList<ArrayList<Integer>>(); 
FLCP.add(new ArrayList<Integer>()); 
FLCP.get(0).add(new Integer(0)); 

Cada elemento debe crearse una instancia. Aquí el ArrayList externo tiene un elemento ArrayList, y primero necesita agregar un elemento para referenciarlo usando el método get.

Algunas notas adicionales; después de leer otras respuestas y comentarios:

1> Cada elemento debe crearse una instancia; la inicialización es diferente de la creación de instancias (consulte flexJavaMysql 's answer)

2> En Java, existen arreglos bidimensionales; C# no tiene matrices en 2D (consulte JB Nizet's answer)

0

la forma que encontré mejor y más conveniente para mí fue declarar ur 2d arrayList y luego también una matriz mono-dimensional normal.

ArrayList<ArrayList<String>> 2darraylist = new ArrayList<>(); 
ArrayList<String> 1darraylist=new ArrayList<>(); 

luego llenar la 'lista 1D'array y luego agregar el 1D a la lista de arreglo 2D.

1darraylist.add("string data"); 
2darraylist.add(idarraylist); 

esto funcionará siempre y cuando su problema sea simplemente agregar elementos a la lista. si desea agregarlos a posiciones específicas en la lista, el .get(). set(); es a lo que quieres apegarte.

0
String[] myList = {"a","b","c","d"}; 
ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>(); 
data.add(new ArrayList<String>()); 
int outerIndex =0; 
int innerIndex =0; 
for (int i =0; i<list.length; i++) { 
    data.get(outerIndex).add(innerIndex, list[i]); 
    innerIndex++; 
} 
System.out.println(data); 

Simple para el bucle para agregar datos a una matriz multidimensional.
Por cada índice externo es necesario agregar

data.add(new ArrayList<String>()); 

luego incrementar el índice de exterior, y restablecer el índice interno.
Eso se vería así.

public static String[] myList = {"a", "b","-","c","d","-","e","f","-"}; 

public static ArrayList<ArrayList<String>> splitList(String[] list) { 

    ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>(); 
    data.add(new ArrayList<String>()); 
    int outerIndex =0; 
    int innerIndex =0; 
    for (int i=0; i<list.length; i++) { 
     System.out.println("will add: " + list[i]); 
     if(!list[i].contains("-")) { 
      System.out.println("outerIndex: " + outerIndex +" innerIndex: "+ innerIndex); 
      data.get(outerIndex).add(innerIndex, list[i]); 
      innerIndex++; 
     } else { 
      outerIndex++; // will move to next outerIndex 
      innerIndex = 0; // reset or you will be out of bounds 
      if (i != list.length-1) { 
       data.add(new ArrayList<String>()); // create an new outer index until your list is empty 
      } 
     } 
    } 
    return data; 
} 
public static void main(String[] args) { 
    System.out.println(splitList(myList)); 
} 
Cuestiones relacionadas