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?
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?
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.
Sono così felice che James Gosling abbia disprezzato i sovraccarichi dell'operatore. –
... dove get (0) restituisce una lista, ovviamente. Notando anche che 17 è autoboxed a 'new Integer (17)' – DNA
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.
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);
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)
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.
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));
}
@ Joey: cosa ne dubita? Si prega di vedere il codice in risposta mentre usa get (...). Get (...). Come questo non consente il mio commento sopra? –
Qualsiasi cosa ritorni 'get (1)', assegnandogli 17 non lo aggiungerà alla Lista - e non lo compilerà comunque, sicuramente? – DNA
@ Joey: Sì, hai ragione e non stavo pensando. Non deve essere abbastanza sangue nel mio sistema di alcol in questo momento. –