Java ArrayList<;字符串>;对象分配

Java ArrayList<;字符串>;对象分配,java,android,Java,Android,我有两个独立的对象ArrayList,分别位于Top和top10两个独立的包中。我将top10的值指定给我的活动中的Top。现在如果我从顶部移除一个元素,它也会从前10名移除。我不知道为什么会这样?我感到完全目瞪口呆。关于java有什么我不知道的吗?还是android 这是我的活动代码: ArrayList<String> Top = new ArrayList<String>(); // ServiceCall is the name of the

我有两个独立的对象
ArrayList
,分别位于Top和top10两个独立的包中。我将top10的值指定给我的活动中的Top。现在如果我从顶部移除一个元素,它也会从前10名移除。我不知道为什么会这样?我感到完全目瞪口呆。关于java有什么我不知道的吗?还是android

这是我的活动代码:

ArrayList<String> Top = new ArrayList<String>();          

// ServiceCall is the name of the class where top10 is initialized.

Top = ServiceCall.top10;

System.out.println("top WR: "+ServiceCall.top10);

if(Top.get(0).equals("Please Select")) Top.remove(0);   

System.out.println("top WR: "+ServiceCall.top10);
ArrayList Top=new ArrayList();
//ServiceCall是初始化top10的类的名称。
Top=ServiceCall.top10;
System.out.println(“top WR:+ServiceCall.top10”);
如果(Top.get(0.equals)(“请选择”)Top.remove(0);
System.out.println(“top WR:+ServiceCall.top10”);

第二条打印出来的语句比之前少了一个元素。

您指向的是同一个对象

Top = ServiceCall.top10;
不是创建新对象,而是引用另一个对象,因此两个指针中的所有更改都将反映在同一个对象中

Top = ServiceCall.top10;
您必须创建一个新的,并将另一个作为参数传递:

List<String> Top = new ArrayList<String>(ServiceCall.top10);
List Top=新的ArrayList(ServiceCall.top10);

您将顶部指向前10名,而不是创建新列表(您的初始值设定项现在实际上未使用,因为您只是将其重新写入另一个列表。)

你应该做:

ArrayList<String> Top = new ArrayList<String>(ServiceCall.top10);    
ArrayList Top=新的ArrayList(ServiceCall.top10);

这将创建一个浅层副本。

Top是对servicecall中top10的引用,因此当您调用remove(0)时,它会删除0处的元素,这就是为什么您看到的元素更少。您知道引用吗?对!我愿意。我想我完全是把它当作我心中的一个变量。谢谢