识别列表中的重复项

新手上路,请多包涵

我有一个整数类型的列表,例如:

 [1, 1, 2, 3, 3, 3]

我想要一种方法来返回所有重复项,例如:

 [1, 3]

做这个的最好方式是什么?

原文由 freshest 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 419
2 个回答

add Set 返回一个布尔值是否已经存在(如果不存在则为true,如果已经存在则为false,请参阅 设置文档)。

所以只需遍历所有值:

 public Set<Integer> findDuplicates(List<Integer> listContainingDuplicates) {
    final Set<Integer> setToReturn = new HashSet<>();
    final Set<Integer> set1 = new HashSet<>();

    for (Integer yourInt : listContainingDuplicates) {
        if (!set1.add(yourInt)) {
            setToReturn.add(yourInt);
        }
    }
    return setToReturn;
}

原文由 leifg 发布,翻译遵循 CC BY-SA 4.0 许可协议

我也需要一个解决方案。我使用了 leifg 的解决方案并使其通用。

 private <T> Set<T> findDuplicates(Collection<T> collection) {

    Set<T> duplicates = new LinkedHashSet<>();
    Set<T> uniques = new HashSet<>();

    for(T t : collection) {
        if(!uniques.add(t)) {
            duplicates.add(t);
        }
    }

    return duplicates;
}

原文由 John Strickler 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题