从ArrayList中删除重复值(两个值都要删除)

17

我有一个包含以下字符串的 ArrayList;

 List<String> e = new ArrayList<String>();
 e.add("123");
 e.add("122");
 e.add("125");
 e.add("123");
我想检查列表中的重复项并将其从列表中删除。 在这种情况下,我的列表只有两个值,在此示例中它将是值122和125,而两个123将会消失。最好的方法是什么?我考虑使用一个Set,但那只会删除其中一个重复项。

你可以使用一个Map<String,Integer>(表示String出现的次数),然后过滤掉只有值为1的条目,并将对应的键收集到一个新列表中。 - Alexis C.
1
@3Kings想要删除重复的值,因此在上面的例子中,两个123都应该被删除。 - Shadow Droid
set的add()方法返回true,如果该值没有重复并成功插入。您可以使用它来获取指示,以确定您要插入的新值是否为重复项。然后,您可以查找并删除重复项。 - svarog
你可以使用多重哈希映射。 - Jürgen K.
一个 Set 不会移除项目,它将防止添加重复的项目。 - Thomas Weller
11个回答

0

使用Guava库,可以使用Multiset和Streams:

e = HashMultiset.create(e).entrySet().stream()
    .filter(me -> me.getCount() > 1)
    .map(me -> me.getElement())
    .collect(toList());

这个方法对于大型列表来说相当漂亮,速度也相当快(O(n),常数因子相当大)。但它不保留顺序(如果需要保留顺序,可以使用LinkedHashMultiset),并且它会创建一个新的列表实例。

此外,它也很容易推广,例如可以删除所有三元组。

总的来说,多重集数据结构真的很有用,值得放在工具箱里。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接