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

2024-02-13

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

我尝试将其转换为列表,但我的服务器上的堆不允许这么大的数据量(我的 ISP 对其进行了限制)。而 for 循环中的常规 for 循环需要 5 分钟以上的时间来计算。

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

帮助将不胜感激!


你也许可以使用一个位组?不知道Java的BitSet效率如何。但 9999999 个可能的值只需要 9999999 / 8 = 1250000 字节 = 刚刚超过 1Mb。当您遍历值数组时,将相应的位设置为 true。然后,您可以遍历该位集,并在发现某个位设置为 true 时输出相应的值。

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

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

而且...这是一个 O(n) 算法,因为它需要对输入数据进行一次传递,集合操作是 O(1) (对于像这样的基于数组的集合),并且输出传递也是 O( m) 其中 m 是唯一值的数量,根据定义,必须

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 从大整数数组中删除重复项 的相关文章

随机推荐