java - 查找不重复的数字
问题描述
我试图在数组中找到不重复的数字并将这些数字打印到新数组中。它有点工作,但由于某种原因两次打印一个数字,我不明白为什么。输出应该是 4 和 7,但它会打印 4 4 7。
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
public class Frequence {
public static void main(String[] args) {
int[] array = new int[]
{
1, 2, 3, 2, 3, 3, 5, 4, 7, 1, 5
};
List<Integer> arr = new ArrayList<>();
for (int value : array) {
int count = 0;
for (int i : array)
if (value == i)
count++;
if (count == 1) {
arr.add(value);
Integer[] arr2 = new Integer[arr.size()];
arr2 = arr.toArray(arr2);
for (Integer k : arr2)
System.out.println(k);
}
}
}
}
解决方案
由于您使用的是 a List<>
,您可能会考虑使用Set<>
. 由于设置值不包含重复项并且它们的值是经过哈希处理的,因此它们适合这种类型的操作。
以下适用于单个循环:
- 首先将值添加到
nonDups
集合中。 - 现在将它添加到
found
集合中。如果该值已在该集合中,则它位于较早的位置并返回 false。因此它必须是重复的,因此将其从nonDups
. - 继续,直到处理完所有值。
Set<Integer> nonDups = new HashSet<>();
Set<Integer> found = new HashSet<>();
for (int k : array) {
nonDups.add(k);
if (!found.add(k)) { // returns false if already present
nonDups.remove(k);
}
}
System.out.println(nonDups);
印刷
[4,7]
推荐阅读
- r - 在 case_when 中使用列名作为失败输出
- ios - 一个视图控制器中的 2 个表视图在 tableview.reloadData() 上出现错误
- ruby-on-rails - Rails 6 Capistrano 部署到生产不提供 css 和 js 文件
- oauth-2.0 - 在 Outlook 365 Web 插件 13005 中获取 SSO 时出错。缺少预授权
- javascript - 向网站添加汉堡菜单和分享按钮
- javascript - 在页面加载时强制 document.hasFocus 为 true
- java - 如何将日历日期设置为上限和下限 10 分钟?
- c++ - 我需要使用带有(元素,频率)对的双向链表制作一个包
- c# - 为什么一个版本的 nuget 包可以工作,而另一个不能?
- php - 如何使用 Drupal 模块生成文件?