我有三个ArrayLists:
一个用于按照输入的顺序存储用户输入,位于主类中
第二个与第一个完全相同,但它被传递到一个名为remTrip
的方法中进行复制并返回结果。
第三个是下面代码中的list1
,这是正在处理的代码。
public static ArrayList<String> remTrip( ArrayList<String> a){
//code here
ArrayList<String> list1 = a;
Collections.sort(list1);
//code to remove triplicates from the list and returns the result
}
我希望保持第一个ArrayList<String>
与它的顺序相同(即{"dog", "cat" , "tiger", "cat", "cat"}
),但显然Collections.sort()
对所有ArrayLists进行排序。
如何只对其中一个列表进行排序而不对其他列表进行排序?
答案 0 :(得分:6)
问题不在于list1
的工作原理。问题是,不是创建列表的副本,而是将新列表设置为等于列表。这意味着它们都指向同一个对象,排序一个会对另一个进行排序,因为它们是同一个东西。要解决此问题,请将a
设置为ArrayList<String> list1 = new ArrayList<String>(a);
的副本,而不是将它们设置为相等。
你应该能够做到
a=[]
for i in xrange(3):
a.append([])
for j in xrange(3):
a[i].append(i+j)
print a
print a[0,2]
答案 1 :(得分:3)
你所谈论的三个集会主义者并不是三个不同的arraylists。它们只是对同一个arraylist的三个不同的引用。
你所做的基本上是 -
List list01 = new ArrayList();
List list02 = list01;
List list03 = list01;
你想要的是什么 -
List list01 = new ArrayList();
List list02 = new ArrayList(list01);
List list03 = new ArrayList(list01);
但你应该记住,这种方式会给你一份你的List,而不是它的所有元素。因此,如果您更改复制列表中的某个元素,它也会在原始列表中更改。
如何解决 - 提示copy constructor
。