2016-02-29 8 views
6

Ben dize bir ArrayList var, bu reklam iç sınıf içindeki bu originalArrayList kopyalanan bazı değerlerinArrayList öğelerindeki öğeler nasıl değiştirilir Orijinali etkilemeden çoğaltılır mı?

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

ile originalArrayList diyelim ve bazı elemanlarını

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

kaldırıldı Ama bu orijinal ArrayList etkiliyor Benim durumumda originalArrayList.

Bunun olmasını nasıl engelleyebilirim?

+0

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

cevap

4

Ben sadece sorunu çözmek için iki yol vardır bildiği gibi,

  • yeni ArrayList oluşturun ve halka kullanılarak originalArrayList her bir öğesini ekleyin (Çünkü unncessesory belleğe alan bir iş arasında, tavsiye edilmez)

  • originalArrayList'u tempArrayList için klonlayın.

eklemek, yeni ArrayList her eleman assign neler oluyor

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

teşekkürler ikinci bir uygulamalıyım ... – user5995765

1

ArrayList şöyle ben tavsiye eder bu

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

Klonlama gibi görünür ifadesi sığ bir kopyadır, yani iki değişken aynı m noktasına işaret eder Emory konumu, bu yüzden her ikisi de değişti.

Ne yapabilirsiniz ArrayList yeni bir örneğini oluşturmak için ArrayList klon:.

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

+0

answe'niz için teşekkürler r ... – user5995765

1

ArrayList kopya herhangi Collection geçirilen bir kurucu sunar

ArrayList<String> tempArrayList = new ArrayList<String>(originalArrayList); 
İlgili konular