从列表中删除重复的元素

dgh*_*htr 5 java list duplicates

我开发了一个数组列表.

ArrayList<String> list = new ArrayList<String>();

list.add("1");
list.add("2");
list.add("3");
list.add("3");
list.add("5");
list.add("6");
list.add("7");
list.add("7");
list.add("1");
list.add("10");
list.add("2");
list.add("12");
Run Code Online (Sandbox Code Playgroud)

但如上所述它包含许多重复元素.我想删除该列表中的所有重复项.为此我想首先我需要将列表转换为集合.

Java是否提供将列表转换为集合的功能?是否有其他设施可以从列表中删除重复项?

Ted*_*opp 24

您可以转换为Set:

Set<String> aSet = new HashSet<String>(list);
Run Code Online (Sandbox Code Playgroud)

或者您可以转换为一个集合并返回到列表:

list = new ArrayList<String>(new HashSet<String>(list));
Run Code Online (Sandbox Code Playgroud)

然而,这两者都不可能保持元素的顺序.要保留顺序,可以HashSet在迭代时使用a 作为辅助结构:

List<String> list2 = new ArrayList<String>();
HashSet<String> lookup = new HashSet<String>();
for (String item : list) {
    if (lookup.add(item)) {
        // Set.add returns false if item is already in the set
        list2.add(item);
    }
}
list = list2;
Run Code Online (Sandbox Code Playgroud)

在重复的情况下,只有第一次出现在结果中.如果您只想出现最后一次出现,那就更难了.我将通过反转输入列表,应用上述内容,然后反转结果来解决它.


Abh*_*nda 9

这个:

Set<String> set = new HashSet<String>();
set.addAll(list);
list.clear();
list.addAll(set);
Run Code Online (Sandbox Code Playgroud)

  • @ user1351820实际上Java提供了一个构造函数来用任何其他`Collection`初始化`Collection`,所以它甚至更宽:) (4认同)

Ali*_*eed 5

Java 8方式: list.stream().distinct().collect(Collectors.toList());

完了:)