我有一个项目列表,需要删除重复的项目,然后将列表复制到另一个列表中。问题是我无法将列表复制到另一个列表中。
代码
.....
private List mylist = new ArrayList();
.....
LinkedHashSet hs = new LinkedHashSet();
hs.addAll(mylist);
mylist.clear();
mylist.addAll(hs);
MyClass.getItems().clear();
MyClass.setItems(mylist);
MyClass.java
.....
private List Items = new ArrayList();
public void setItems(List myItems) {
for (int i = 0; i < myItems.size(); i++) { <<This loop shows the items
System.out.println(myItems.get(i));
}
this.Items.clear();
this.Items.addAll(myItems);
for (int i = 0; i < Items.size(); i++) { << this loop does not show anything
System.out.println(Items.get(i));
}
}
期望的结果
mylist >> a,b,c,a,d,c
change to a,b,c,d
then copy to items
items >> a,b,c,d
答案 0 :(得分:1)
您可以使用LinkedHashSet
。这将保留插入顺序并确保没有重复。
是你在列表中添加任何内容。你工作的代码
List<Integer> mylist = new ArrayList<Integer>();
mylist.add(3);
mylist.add(3);
HashSet hs = new HashSet();
hs.addAll(mylist);
mylist.clear();
mylist.addAll(hs);
System.out.println(mylist.size()); //prints 1
System.out.println(hs.size());// prints 1
回复已编辑的问题:
他们似乎都打印好了清单
public class Tmp {
private List<Integer> Items = new ArrayList<Integer>();
public void setItems(List<Integer> myItems) {
for (int i = 0; i < myItems.size(); i++) { //<<This loop shows the items
System.out.println(myItems.get(i));
}
this.Items.clear();
this.Items.addAll(myItems);
System.out.println();
for (int i = 0; i < Items.size(); i++) { //<< this loop also shows the item
System.out.println(Items.get(i));
}
}
public static void main(String[] args) {
Tmp t = new Tmp();
List<Integer> myList = new ArrayList<Integer>();
myList.add(3);
myList.add(4);
t.setItems(myList);
}
}
这两段代码是否在同一个类中,两个列表变量都指向同一个arrayList实例。如果是这样,清除一个清除两个列表(因为两个变量都指向同一个列表)