我正在研究Pi Finder应用程序。我知道有很多关于它的应用程序,但我想自己做。我用Leibniz公式做到了,但由于重复的数字,它工作得很慢。我正在使用列表对于存储。你可以帮我找到列表或数组中的重复数字吗?
实施例 {1,2,5,4,7,6,4,7,6,4,7,....} 我需要找到4,7,6
答案 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);
}