微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算数组中的唯一值Java

如何解决计算数组中的唯一值Java

之前有人问过,我知道,但我真的不知道为什么我的代码不起作用。我试图弄清楚未定义数组中有多少个唯一值。 (即 {0,1,5,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;
}

解决方法

假设数组已排序,您应该只检查每个元素是否不等于紧随其后的元素。计数器也应初始化为 1,因为如果所有元素都相同,则唯一元素的数量为 1。我们还需要添加对 null 或空数组的检查,其结果为 0。 (如果没有排序,您可以使用 Arrays.sort 对其进行排序,但这不是最快的方法。)

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;
}

替代方法包括使用 Stream#distinctSet,它们不依赖于 order*

System.out.println(java.util.Arrays.stream(array).distinct().count());

System.out.println(java.util.stream.IntStream.of(array).distinct().count());

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

,

如果输入数组按照您的示例进行排序,则不需要嵌套循环:

public static int numUnique (double[] list) {
    if (null == list || 0 == list.length) {
        return 0;
    }
    int counter = 1;
    
    for (int i = 1; i < list.length; i++) {
        if (list[i] != list[i - 1]) {
            counter ++;
        }
    }
    
    
    return counter;
}

可以使用Stream API,函数distinctcount来达到相同的结果(输入数组不需要排序):

public static int numUniqueStream (double ... list) {
    if (null == list) {
        return 0;
    }
    return (int) Arrays.stream(list).distinct().count();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?