Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算数组中的唯一值(Java)_Java_Arrays_Unique Array - Fatal编程技术网

计算数组中的唯一值(Java)

计算数组中的唯一值(Java),java,arrays,unique-array,Java,Arrays,Unique Array,我知道以前有人问过,但我真的不知道为什么我的代码不起作用。我试图找出一个未定义数组中有多少唯一值。(即,{0,0,1,1,1,5,5,6,6,7}应返回一个值5。这是我到目前为止得到的: public static int numUnique(double[] list) { int counter = 0; for(int i = 0; i < list.length; i++) { for(int j = i + 1; j < list.

我知道以前有人问过,但我真的不知道为什么我的代码不起作用。我试图找出一个未定义数组中有多少唯一值。(即,{0,0,1,1,1,5,5,6,6,7}应返回一个值5。这是我到目前为止得到的:

public static int numUnique(double[] list) {
    int counter = 0;
    
    for(int i = 0; i < list.length; i++) {
        for(int j = i + 1; j < list.length; j++) {
            if(list[i] != list[j])
                counter ++;
        }
    }
    
    
    return counter;
}
public static int numUnique(双[]列表){
int计数器=0;
for(int i=0;i
假设数组已排序,则只应检查每个元素是否与紧跟其后的元素不相等。计数器还应初始化为
1
,因为如果所有元素都相同,则唯一元素的数量为
1
。我们还需要添加一个检查,以检查
null
或空数组,结果为
0
(如果未排序,可以使用
Arrays.sort
对其排序,但这不是最快的方法。)



*实现为您提供了可预测的迭代顺序。

如果输入数组按示例中的顺序排序,则不需要嵌套循环:

public static int numUnique(双[]列表){
if(null==list | | 0==list.length){
返回0;
}
int计数器=1;
for(int i=1;i

可以使用流API、函数
distinct
count
来获得相同的结果(输入数组不需要排序):

public static int numiniquestream(双…列表){
if(null==列表){
返回0;
}
return(int)Arrays.stream(list.distinct().count();
}

HashMap非常适用于此,如果值已经在HashMap中,则先计算它的值,否则创建一个新条目。然后检查有多少键具有值1new HashSet(Arrays.asList(list)).size()请不要使用集合来解决显然是家庭作业的问题。@PetterFriberg,建议的答案是指javascript而不是javawhy's work?当您只检查它后面的一个时?@Alex假定数组已排序。我怀疑这是否适用于
[0,1,0,1,0,1,1,0,1]
。数组没有被称为已排序。@iota OP也没有提到它是已排序的sorted@Alex无论如何,我添加了另一种方法。如果数组没有排序…?@Matthieu,这没关系——所有这些都在iota的答案中。我键入的速度太慢了。
public static int numUnique(double[] list) {
    if(list == null || list.length == 0) return 0;
    int counter = 1;
    
   for(int i = 1; i < list.length; i++)
       if(list[i - 1] != list[i]) ++counter;
    
    
    return counter;
}
System.out.println(java.util.Arrays.stream(array).distinct().count());
System.out.println(java.util.stream.IntStream.of(array).distinct().count());