使用Java从大整数数组中删除重复项

dir*_*cke 12 java arrays integer loops

您是否知道有时使用Java从非常大的整数数组中删除重复值的有效方法?数组的大小取决于登录用户,但总是超过1500000个未排序的值和一些重复项.每个整数都包含一个介于100000和9999999之间的数字.

我尝试将其转换为List,但我服务器上的堆不允许这么多数据(我的ISP限制了它).for循环中的常规for循环需要5分钟才能计算出来.

没有重复项的数组的大小是我将存储在我的数据库中的大小.

帮助将不胜感激!

dty*_*dty 37

你也许可以用一下套装?我不知道Java的BitSet有多高效.但是9999999可能的值只需要9999999/8 = 1250000字节=仅超过1Mb.在遍历值数组时,将相应位设置为true.然后,只要找到位设置为true,就可以遍历位集并输出相应的值.

1Mb将适合CPU缓存,因此根据位集实现,这可能非常有效.

这也具有对数据进行排序的副作用.

...这是O(n)的算法,因为它需要在输入数据的单次通过中,该组操作是O(1)(对于基于阵列的集合这样),并且输出传输也O( m)其中m是唯一值的数量,根据定义,必须<= n.

  • 这些聪明的答案是我来StackOverflow的原因 (5认同)