如何删除列表的重复项目并将列表复制到另一个列表中

时间:2013-05-22 00:11:05

标签: java

我有一个项目列表,需要删除重复的项目,然后将列表复制到另一个列表中。问题是我无法将列表复制到另一个列表中。

代码

    .....
    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

1 个答案:

答案 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实例。如果是这样,清除一个清除两个列表(因为两个变量都指向同一个列表)