Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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_Distinct - Fatal编程技术网

Java(计算不同的整数)

Java(计算不同的整数),java,arrays,unique,distinct,Java,Arrays,Unique,Distinct,例如,如何返回数组中不同/唯一值的数目 int[] a = {1,2,2,4,5,5}; 集合中的每个唯一元素(由.equals()定义)只存储一次,您可以使用它来简化问题。创建一个集合(我会使用HashSet),迭代数组,将每个整数添加到集合中,然后返回集合的.size(); Set<Integer> s = new HashSet<Integer>(); for (int i : a) s.add(i); int distinctCount = s.size();

例如,如何返回数组中不同/唯一值的数目

int[] a = {1,2,2,4,5,5};
集合中的每个唯一元素(由.equals()定义)只存储一次,您可以使用它来简化问题。创建一个集合(我会使用HashSet),迭代数组,将每个整数添加到集合中,然后返回集合的.size();
Set<Integer> s = new HashSet<Integer>();
for (int i : a) s.add(i);
int distinctCount = s.size();
对于(int i:a)s.add(i); int distinctCount=s.size();
一种有效的方法:使用
数组对数组进行排序。排序
。写一个简单的循环来计算相邻的相等值。

实际上取决于数组中元素的数量。如果您没有处理大量整数,那么哈希集或二叉树可能是最好的方法。另一方面,如果您有一个由不同整数组成的大数组(例如,超过10亿个),那么分配一个2^32/2^8=512 MB字节的数组可能是有意义的,在该数组中,每一位表示整数的存在或不存在,然后计算最后的设置位数

二叉树方法需要n*logN时间,而数组方法需要n时间。此外,二叉树要求每个节点有两个指针,因此内存使用率也会高得多。类似的考虑也适用于哈希表


当然,如果集很小,则只需使用内置哈希集。

它总是排序吗?这很重要,假设你正在寻找最有效的方法。不,它不会总是被排序。有时我需要先把它分类。如果你能在你的问题中提供更多的细节,可能会有所帮助。例如,您是否正在寻找有效的解决方案?有解决办法吗?使用您自己的算法的解决方案?使用Java拥有的数据结构的解决方案(例如,dcrosta的答案)?非常确定一个集合将有一个.size()或.length()或.count()方法来获取其中的元素数。当然,OP要求的是不同整数的数量,而不是不同整数的列表。不过,同样的方法也适用。我最初是这样写的,后来又误读了这个问题。现在编辑。+1。这是最好的答案,因为Latoya只要求不同值的数量。我认为crosta通常更好,因为它更容易,也不太可能出错。我的答案是,只有在这个特定任务的性能很重要的情况下(就像以往一样,首先衡量简单的解决方案,看看它是否足够)。