使用Java查找列表中的重复数字

时间:2018-01-14 09:52:32

标签: java pi

我正在研究Pi Finder应用程序。我知道有很多关于它的应用程序,但我想自己做。我用Leibniz公式做到了,但由于重复的数字,它工作得很慢。我正在使用列表对于存储。你可以帮我找到列表或数组中的重复数字吗?

实施例 {1,2,5,4,7,6,4,7,6,4,7,....} 我需要找到4,7,6

1 个答案:

答案 0 :(得分:1)

您可以使用Set作为累加器找到重复的元素,然后使用Collections.frequency检查给定的数字是否在List<Integer>内多次出现,如下所示:

List<Integer> elements = new ArrayList<>(Arrays.asList(1,2,5,4,7,6,4,7,6,4,7));
Set<Integer> accumulator = new LinkedHashSet<>(); 
for (Integer number : elements) {
   if(Collections.frequency(elements, number) > 1)
       accumulator.add(number);   
}

现在accumulator包含:

[4, 7, 6]
此处使用

LinkedHashSet来维护广告订单。如果不需要,那么您可以使用HashSet代替。

或JB Nizet建议的更好的高性能解决方案:

List<Integer> elements = new ArrayList<>(Arrays.asList(1,2,5,4,7,6,4,7,6,4,7));
Set<Integer> tempAccumulator = new LinkedHashSet<>();
Set<Integer> resultSet = new LinkedHashSet<>();
for (Integer number : elements) {
     if(!tempAccumulator.add(number))
        resultSet.add(number);
}