1

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

代码

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

1 回答 1

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

于 2013-05-22T00:16:02.817 回答