gpt4 book ai didi

Java 将列表存储中的重复项删除到其他列表中?

转载 作者:行者123 更新时间:2023-11-29 07:07:55 24 4
gpt4 key购买 nike

我有一个包含多个重复单词的单词列表。我想提取重复的单词并将它们存储在另一个列表中(保持原始列表的完整性)。

我尝试像您在下面看到的那样遍历列表,但这在逻辑上失败了,因为每个“欺骗”在某个时候都会等于主要的。我真的很想遍历列表并针对列表中的每个字符串检查列表中的所有其他字符串是否重复。

List 接口(interface)中是否有允许此类比较的方法?

作为引用,列表 1 是一个字符串列表。

for(String primary: list1){
for(String dupe: list1){
if(primary.equals(dupe)){
System.out.print(primary + " " + dupe);
ds3.add(primary);
}
}
}

编辑:

我应该注意,我知道 Set 不允许重复项,但我想做的是获取重复项。我想把它们找出来,拿出来以后用。我并不是要根除它们。

最佳答案

删除重复项的最简单方法是将所有元素添加到一个 Set 中:

Set<String> nodups = new LinkedHashSet<String>(list1);
List<String> ds3 = new ArrayList<String>(nodups);

在上面的代码中,ds3 将是无重复的。现在,如果您有兴趣在 O(n) 中查找哪些元素是重复的:

Map<String, Integer> counter = new LinkedHashMap<String, Integer>();
for (String s : list1) {
if (counter.containsKey(s))
counter.put(s, counter.get(s) + 1);
else
counter.put(s, 1);
}

通过以上,很容易找到重复的元素:

List<String> ds3 = new ArrayList<String>();
for (Map.Entry<String, Integer> entry : counter.entrySet())
if (entry.getValue() > 1)
ds3.add(entry.getKey());

还有另一种方法,也是 O(n):使用 Set 来跟踪重复的元素:

Set<String> seen = new HashSet<String>();
List<String> ds3 = new ArrayList<String>();
for (String s : list1) {
if (seen.contains(s))
ds3.add(s);
else
seen.add(s);
}

关于Java 将列表存储中的重复项删除到其他列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17644481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com