我只是在尝试一个简单的程序来查找给定数组中的重复项。
/* Using HashSet */
int[] arrays = {1,2,4,5,4,2};
Set<Integer> hs = new HashSet<Integer>();
for(int ar:arrays)
{
if(!hs.add(ar))
{
System.out.println("Dupicate is:" +ar);
}
}
/* Nested for loop */
int arraySearch[] = {2,2,3,4,5,6,7,7,7,8,10};
int m = 0; boolean flag = true;
for(int i=0; i<arraySearch.length; i++)
{
flag=true;
for(int j=i+1; j<arraySearch.length; j++)
{
if(arraySearch[i] == arraySearch[j])
{
m=arraySearch[i];
flag = false;
break;
}
}
if(flag == false)
{
System.out.println(m);
}
}
这两种方法都给出了正确的结果,但我面临的问题是,如果有两个数字一个接一个地重复,它会打印两次。假设int[]数组= {1,1,2,4,5,4,2};
发布于 2019-02-21 04:03:34
如果重复项不止一个,则会多次打印该数字。只需更改代码一次即可打印出来。试着这样做
Set<Integer> hs=new HashSet<Integer>();
Set<Integer> duplicate= new HashSet<Integer>();
for(int ar:arrays)
{
if(!hs.add(ar))
{
duplicate.add(ar);
}
}
这样可以避免重复打印。在此之后,可以使用循环显示集合中的元素。
发布于 2019-02-21 04:08:50
如果您使用的是Java 8或更高版本,则可以通过以下方式完成此操作:
int[] arrays = {1,1,2,4,5,4,2};
List<Integer> hs = IntStream.of(arrays).boxed().collect(Collectors.toList());
hs.stream().filter(i -> Collections.frequency(hs, i) > 1)
.collect(Collectors.toSet()).forEach(System.out::println);
发布于 2019-02-21 04:34:03
当有双倍数或三倍数时,您是否看到额外的输出?
例如,对于此输入:
int arraySearch[] = {2,2,3,4,5,6,7,7,7,8,10};
将有两个对7的检测。存在两个检测是一个循环测试元素6对元素7到10的结果,以及第二个循环测试元素7对元素8到10的结果:
first detection: {2,2,3,4,5,6,(7),(7),7,8,10};
second detection: {2,2,3,4,5,6,7,(7),(7),8,10};
如果数组按升序排列,则可以使用单个循环完成测试。对于随机顺序的数组,似乎有必要跟踪哪些元素被检测为具有重复项。
https://stackoverflow.com/questions/54794004
复制相似问题