2016-02-29 15 views
6

Ho un ArrayList di stringa, diciamo originalArrayList con alcuni valoriCome modificare gli elementi di ArrayList in It's duplicate senza influenzare quello originale?

final ArrayList<String> originalArrayList = new ArrayList<>(); 
            originalArrayList.add("value1"); 
            originalArrayList.add("value2"); 
            originalArrayList.add("value3"); 
            originalArrayList.add("value4"); 
            originalArrayList.add("value5"); 

ho copiato questo originalArrayList all'interno di classe interna e rimosso alcuni elementi

button.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                ArrayList<String> tempArrayList = originalArrayList; 
                                
                tempArrayList.remove(0); //Remove an element 
               
            } 
        }); 

Ma questo è che interessano l'originale ArrayList che è originalArrayList nel mio caso.

Come posso evitare che ciò accada?

+0

clone è https : //docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#clone() –

risposta

4

Per quanto ne so semplicemente ci sono due modi per risolvere il problema,

  • Crea nuovo ArrayList e aggiungere ogni elemento di originalArrayList usando loop (NON RACCOMANDATA, perché la memoria unncessesory compito che)

  • Clona il originalArrayList a tempArrayList.

L'aggiunta di ogni elemento in new ArrayList sembra qualcosa di simile

ArrayList<String> tempArrayList = new ArrayList<>(); 
    for (String temp : originalArrayList) { 
      tempArrayList.add(temp); 
     } 

Clonazione ArrayList assomiglia a questo, che mi consiglia

ArrayList<String> tempArrayList = (ArrayList<String>) originalArrayList.clone(); 
+0

grazie ho applicato il secondo ... – user5995765

1

Quello che sta succedendo sul assegnare l'istruzione è una copia superficiale, il che significa che due variabili puntano allo stesso m posizione emory, quindi entrambi vengono cambiati.

Che cosa si può fare è clonare il ArrayList per creare una nuova istanza del ArrayList:.

ArrayList<String> tempArrayList = (ArrayList<String>) originalArrayList .clone();

+0

grazie per la vostra risposta r ... – user5995765

1

ArrayList offre un costruttore che le copie qualsiasi Collection passati in

ArrayList<String> tempArrayList = new ArrayList<String>(originalArrayList); 
Problemi correlati