2014-03-13 59 views
6

我有2周的ArrayList中的Java:赋值运算符在Java中

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

mProductList = productSampleList; 

mProductList2 = productSampleList; 

mProductList2 .remove(3); 

的productSampleList具有为什么执行该段代码后,大小5 。 mProductList的大小是4?

我们有什么办法可以避免这种情况吗?我希望mProductList的大小为5,与productSampleList相同。
谢谢!

回答

9

试试这个:

mProductList2 = new ArrayList<ProductSample>(productSampleList); 

按目前,productSampleListmProductListmProductList2都指向同一个对象,这样一个变化都会对别人有所体现。我的解决方案是简单地创建一个可以独立于原始文件修改的列表副本,但请记住:productSampleListmProductList仍指向同一个对象。

+0

请参阅我的更新。在分配之前我已经做了。 –

+0

@VanDang不,你没有,在行'mProductList2 = productSampleList;'你重新分配'mProductList2'到不同的列表。您必须掌握Java中对象引用的概念。 –

+0

我懂了!非常感谢您的帮助!我是Java新手,所以这个错误是不可避免的。再次感谢。 –

2

当您使用list(或arraylist)时,size()方法返回列表中元素的数量。列表不像数组,其大小是固定的。如果你想要一个固定的大小,使用数组。

查看http://docs.oracle.com/javase/7/docs/api/java/util/List.html了解更多关于列表的信息。

Here是阵列和阵列列表之间的一个很好的区别。

4

所有3 productSampleListmProductListmProductList2是到相同ArrayList对象引用,因此要求它们中的任何一个的.remove()方法移除底层单ArrayList对象的元素。

如果要维护每个变量的独立ArrayList参考,您需要创建3种不同的ArrayList小号

2

你可以试试这个: -

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()); 

    } 
} 

输出: -

Main productSampleList size...5 

mProductList size...5 

mProductList2 size...5 

mProductList size...5 

mProductList2 size...4