ArrayList重复删除

时间:2013-02-19 03:11:28

标签: java

这是我的代码:

public static void deleteDuplicates(ArrayList<String> list){
    ArrayList<String> newList = new ArrayList<String>();
    HashSet<String> set = new HashSet<String>();

    for(int i = 0; i < list.size(); i++){
        set.add(list.get(i));
    }

    newList.addAll(set);
    return newList;
}

我对此的输入如下:

1, 2, 2, 3, 4, 3, 1, 5, 5, 4, 1, 4, 5

我得到的输出是:

3, 2, 4, 1, 5

有谁可以解释为什么这不正常?

3 个答案:

答案 0 :(得分:5)

更改LinkedHashSetHashSet

  

Set接口的哈希表和链表实现,具有可预测的迭代顺序。

另外,请记住always program to an interface

public static void deleteDuplicates(List<String> list){
    List<String> newList = new ArrayList<String>();
    Set<String> set = new LinkedHashSet<String>();
    //rest of your code
}

答案 1 :(得分:1)

从HashSet类文档中引用:

  

它不保证集合的迭代顺序;在   特别是,它不保证订单将保持不变   随着时间的推移。

答案 2 :(得分:1)

我确信这是一种更有效的方法,但是这里有一个n ^ 2算法可供删除的想法

public static void deleteDuplicates(ArrayList<String> list){
ArrayList<String> newList = new ArrayList<String>();

for (int i = 0; i < list.size(); i++){

boolean exists = false;
String str = list.get(i);
for (int j = 0; j < newList.size(); j++){
if (newList.get(j).compareTo(str)==0){
exists = true;
break;
}
}
if (!exists) newList.add(str);
}
return newList;
}