如何返回数组中不同/唯一值的数量,例如
int[] a = {1,2,2,4,5,5};
答案 0 :(得分:13)
Set<Integer> s = new HashSet<Integer>();
for (int i : a) s.add(i);
int distinctCount = s.size();
答案 1 :(得分:4)
一个集合将每个唯一的(由.equals()定义)元素存储在其中只有一次,您可以使用它来简化问题。创建一个Set(我使用HashSet),迭代你的数组,将每个整数添加到Set中,然后返回Set的.size()。
答案 2 :(得分:3)
一种有效的方法:使用Arrays.sort
对数组进行排序。写一个简单的循环来计算相邻的相等值。
答案 3 :(得分:2)
确实取决于数组中元素的数量。如果你没有处理大量的整数,那么HashSet或二叉树可能是最好的方法。另一方面,如果你有大量不同的整数(比如超过十亿),那么分配一个2 ^ 32/2 ^ 8 = 512 MByte字节数组可能是有意义的,其中每个比特代表存在或不存在 - 存在一个整数,然后计算最后的设置位数。
二叉树方法需要n * log n时间,而数组方法需要n次。此外,二叉树每个节点需要两个指针,因此您的内存使用量也会高很多。类似的考虑也适用于哈希表。
当然,如果您的设置很小,那么只需使用内置的HashSet。