2016-03-24 13 views
0

İş mantığımda bir listeyi tamamen başka bir listeyle değiştirmek istiyorum.Bir dizi listesini diğer listeyle değiştir

Aşağıdaki yaklaşım doğru mu?

public class TestListReplacement { 

    public static void main(String[] args) { 

     List<String> values= new ArrayList<String>(); 
     values.add("a"); 
     values.add("b"); 
     values.add("c"); 
     values.add("d"); 
     values.add("e"); 
     values.add("f"); 

     List<String> valuesNew= new ArrayList<String>(); 
     valuesNew.add("g"); 
     valuesNew.add("h"); 
     valuesNew.add("i"); 
     valuesNew.add("j"); 
     valuesNew.add("k"); 

     values= valuesNew; 
     for(String val:values){ 
      System.out.println(val); 
     } 
    } 
} 

Bu iyi çalışıyor gibi görünüyor, ancak bazı kullanım durumlarında çalışıp çalışmadığını bilmek istiyorum. Ve referansı üzerine yazma her zaman bir seçenek değildir :

+0

doğru ve çalışır her zaman çalışıyor. –

+1

Kodunuz listelerin belirli bir şeyi ile çalışmıyor. Farklı bir nesne referansı ile üzerine yazılan bir değişkenin nesne referansını gösterir. Mevcut listedeki değerleri güncellemeye çalışıyorsanız, kodunuz böyle değildir. Kodunuzdaki yeni değerleri görmek için o listeye atıfta bulunan başka yerler bekliyorsanız, bu olmayacak. Yukarıdaki açıklamaya ve yalıtılmış kod örneğine göre, hangi sorunu çözmeye çalıştığınız ve çözümünüzün çalışıp çalışmadığı açık değildir. – nbrooks

+1

Aslında, bu soru bir http://stackoverflow.com/questions/3823398/better-practice-to-re-instantiate-a-list-or-invoke-clear (ve diğer bazılarının) kopyasıdır. – nbrooks

cevap

4

Ne yapmaya çalıştığınız şeyi doğru anlamak ne

values.clear(); // delete original contents in the list 
values.addAll(valuesNew); // insert everything in the new list 

hakkında @nbrooks ve başkalarından yanıtlarından daha fazla bağlam eklemek için Açıkçası, iki kez koleksiyon üzerinde yinelenen algılanan verimsizlik, pratikte neredeyse her zaman önemsizdir. Aynı liste örneğini korumanız gerekiyorsa (kodun başka yerlerinde atıfta bulunduğu için), değişkenin üzerine yazmak bu diğer yerleri güncelleştirmez.

+0

@Jonny Eğer liste başka bir sınıfın üyesi ise, ikincisinin bir etkisi yok mu? Farklı problemlerin farklı çözümleri vardır ve bu cevap verilen bir listedeki tüm değerleri yeni değerler ile değiştirmek en kolay yoldur. Değişkenin üzerine yazmak, başlangıçtaki mevcut listeye diğer referansları değiştirmek için hiçbir şey yapmaz. – nbrooks

+0

@nbrooks 'clear()' zaman israf etmiyor? Sadece referanstan kurtulmayı tercih edersiniz ve GC sizin için pis iş yapar, –

+0

@Debosmit Bu, OP'nin kullanımda bulunmadığı duruma göre değişir. Referansın üzerine yazmak her zaman bir seçenek değildir ve açıkçası, koleksiyonda iki kez yinelenen algılanan yetersizlik, uygulamada neredeyse her zaman önemsizdir. Aynı liste örneğini korumanız gerekiyorsa (kodun başka yerlerinde atıfta bulunduğu için), değişkenin üzerine yazmak bu diğer yerleri güncelleştirmez. – nbrooks

İlgili konular