删除ArrayList中的重复项

时间:2013-10-09 01:08:35

标签: java arraylist

对于这个赋值,我将编写一个方法removeDuplicates,它将一个排序的字符串ArrayList作为参数,并从列表中删除任何重复项。

例如,假设名为list的变量包含以下值:

{"be", "be", "is", "not", "or", "question", "that", "the", "to", "to"} 

调用removeDuplicates(list)后,列表应存储以下值:

{"be", "is", "not", "or", "question", "that", "the", "to"}

我差点把它弄下来,但出于某种原因,如果列表包含

["duplicate", "duplicate", "duplicate", "duplicate", "duplicate"] 

它会删除除2之外的所有内容,导致[重复,重复]而不是[重复]

这是我的代码:

private static void removeDuplicates(ArrayList<String> thing) {
    for (int i = 0; i < thing.size(); i++) { // base word to compare to
        String temp = thing.get(i);

        for (int j = 0; j < thing.size(); j++) { // goes through list for match
            String temp2 = thing.get(j);

            if (temp.equalsIgnoreCase(temp2) && i != j) { // to prevent removal of own letter.
                thing.remove(j);
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

问题是,即使找到重复内容,也会执行“j ++”。一旦你做了“thing.remove(j);”它实际上将所有内容都降低了一个索引值,因此您不必增加j。

示例:

{ duplicate, duplicate, duplicate, duplicate, duplicate }

i iteration 1:
i=0 [dup, dup, dup, dup, dup]
j=0 [dup, dup, dup, dup, dup]
remove=1
j=1 [dup, dup, dup, dup]
remove=2
j=2 [dup, dup, dup]

i iteration 2:
i=1 [dup, dup, dup]
remove=0
j=0 [dup, dup]
j=1 [dup, dup]

[dup, dup]

i iteration 3 stops since 3>size of list.

答案 1 :(得分:0)

每次删除ArrayList中的条目时,其大小都会递减。

因此thing.size()会减少。

答案 2 :(得分:0)

将为您提供Java Collections技巧:将List转换为Set,根据定义,它只保留唯一值,然后再将其转换回List。