2012-03-03 12 views
6

So che per gli array è possibile aggiungere un elemento in un array bidimensionale in questo modo:Aggiunta elemento in due ArrayList dimensionale

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

Come posso fare la stessa cosa con ArrayList?

+0

@ Joey: cosa ne dubita? Si prega di vedere il codice in risposta mentre usa get (...). Get (...). Come questo non consente il mio commento sopra? –

+1

Qualsiasi cosa ritorni 'get (1)', assegnandogli 17 non lo aggiungerà alla Lista - e non lo compilerà comunque, sicuramente? – DNA

+1

@ Joey: Sì, hai ragione e non stavo pensando. Non deve essere abbastanza sangue nel mio sistema di alcol in questo momento. –

risposta

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

forse?

Questo presuppone un nidificato ArrayList, cioè

ArrayList<ArrayList<Integer>> myList; 

E per prendersela con la vostra scelta delle parole: Questo assegna un valore a un luogo specifico in lista interno, esso non aggiungere uno . Ma così fa il tuo esempio di codice, dato che gli array hanno una dimensione fissa, quindi devi crearli nella giusta dimensione e quindi assegnare valori ai singoli slot di elementi.

Se si vuole realmente aggiungere un elemento, quindi ovviamente è .add(17), ma non è quello che il codice ha fatto, così sono andato con il codice di cui sopra.

+1

Sono così felice che James Gosling abbia disprezzato i sovraccarichi dell'operatore. –

+2

... dove get (0) restituisce una lista, ovviamente. Notando anche che 17 è autoboxed a 'new Integer (17)' – DNA

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

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

Ricorda che non esistono le matrici 2-dimensionali. Sono in realtà array o array.

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

ArrayList<ArrayList<String>> contiene elementi di tipo ArrayList<String>

Ciascun elemento deve essere inizializzato

Questi elementi contengono elementi di tipo String

Per recuperare il String "stringa" in 3 linee Ad esempio, è possibile utilizzare

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)); 

Ogni elemento deve essere istanziato. Qui l'ArrayList esterno ha l'elemento ArrayList e per prima cosa è necessario aggiungere un elemento per farvi riferimento usando il metodo get.

Alcune note aggiuntive; dopo aver letto altre risposte e commenti:

1> Ogni elemento deve essere istanziato; l'inizializzazione è diversa dall'istanza (fare riferimento a flexJavaMysql's answer)

2> In Java esistono matrici bidimensionali; C# non ha matrici 2D (vedi JB Nizet s' answer)

0

il modo migliore che ho trovato adatto per me era di dichiarare ur 2d arrayList e poi anche una matrice di mono-dimensione nornal.

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

quindi riempire il 'lista 1D'array e poi aggiungere il 1D alla lista di array 2D.

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

questo funzionerà fino a quando il problema è semplicemente quello di aggiungere elementi alla lista. se vuoi aggiungerli a posizioni specifiche nella lista, il .get(). set(); è quello che vuoi restare.

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); 

Semplice per il ciclo per aggiungere dati a una matrice multidimensionale.
Per ogni indice esterno è necessario aggiungere

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

quindi incrementare l'indice esterno, e reimpostare l'indice interno.
Sarebbe simile a questo.

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)); 
}