计算数组中的唯一值(Java)
之前有人问过,我知道,但我真的不知道为什么我的代码不起作用。我试图弄清楚未定义数组中有多少个唯一值。(即 {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;
}
回答
假设数组已排序,您应该只检查每个元素是否不等于紧随其后的元素。计数器也应初始化为,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;
}
替代方法包括 usingStream#distinct
或 a Set
,它们不依赖于 order *。
System.out.println(java.util.Arrays.stream(array).distinct().count());
或者
System.out.println(java.util.stream.IntStream.of(array).distinct().count());
*LinkedHashSet
实现为您提供可预测的迭代顺序。