2014-03-13 19 views
6

Ich habe 2 Arraylisten in Java:Assign Operator in Java

mProductList = new ArrayList<ProductSample>(); 
mProductList2 = new ArrayList<ProductSample>(); 

mProductList = productSampleList; 

mProductList2 = productSampleList; 

mProductList2 .remove(3); 

Die productSampleList hat eine Größe 5. Warum nach diesem Segment Code ausgeführt wird. mProductList hat Größe 4?

Haben wir eine Möglichkeit, dies zu vermeiden? Ich möchte, dass die mProductList Größe 5 genauso groß ist wie productSampleList.
Danke!

Antwort

9

Try this:

mProductList2 = new ArrayList<ProductSample>(productSampleList); 

Wie es derzeit ist, productSampleList, mProductList und mProductList2 alle auf das gleiche Objekt, so Änderungen an einem auf den anderen reflektiert wird. Meine Lösung war, einfach eine Kopie der Liste zu erstellen, die unabhängig vom Original geändert werden kann, aber denken Sie daran: productSampleList und mProductList zeigen immer noch auf das gleiche Objekt.

+0

Bitte beachten Sie mein Update. Ich habe es schon getan bevor ich es zugewiesen habe. –

+0

@VanDang nein, nicht in der Zeile 'mProductList2 = productSampleList;' haben Sie 'mProductList2' einer anderen Liste zugewiesen. Sie müssen das Konzept der Objektreferenzen in Java verstehen. –

+0

Ich habe es! Vielen Dank für Ihre Hilfe! Ich bin neu in Java, also ist dieser Fehler unvermeidlich. Danke noch einmal. –

2

Wenn Sie list (oder arraylist) verwenden, gibt die Methode size() die Anzahl der Elemente in der Liste zurück. Listen sind nicht wie Arrays, bei denen die Größe festgelegt ist. Wenn Sie eine feste Größe wünschen, verwenden Sie Arrays.

Werfen Sie einen Blick auf http://docs.oracle.com/javase/7/docs/api/java/util/List.html, um mehr über Listen zu erfahren.

Here ist eine gute Unterscheidung zwischen Arrays und Arraylists.

4

All 3 productSampleList, mProductList und mProductList2 sind Verweise auf das gleiche Objekt ArrayList daher den Aufruf die Methode .remove() auf einem von ihnen entfernt das Element aus dem zugrundeliegenden Einzel ArrayList Objekt.

Wenn Sie separate ArrayList Referenz für jede Ihrer Variablen erhalten möchten, müssen Sie 3 verschiedene ArrayList s

2

Sie können dies erstellen versuchen: -

public class ArrayListTest { 

    public static void main(String str[]){ 
     ArrayList productSampleList=new ArrayList(); 
     ArrayList mProductList=null; 
     ArrayList mProductList2=null; 

     productSampleList.add("Hi"); 
     productSampleList.add("Hi"); 
     productSampleList.add("Hi"); 
     productSampleList.add("Hi"); 
     productSampleList.add("Hi"); 

     System.out.println("Main productSampleList size..."+productSampleList.size()); 
     mProductList=new ArrayList(productSampleList); 
     mProductList2=new ArrayList(productSampleList); 
     System.out.println("mProductList size..."+mProductList.size()); 
     System.out.println("mProductList2 size..."+mProductList2.size()); 
     mProductList2.remove(1); 
     System.out.println("mProductList size..."+mProductList.size()); 
     System.out.println("mProductList2 size..."+mProductList2.size()); 

    } 
} 

Ausgang: -

Main productSampleList size...5 

mProductList size...5 

mProductList2 size...5 

mProductList size...5 

mProductList2 size...4