我是新来的,所以请原谅我的菜鸟错误。我目前正在做我的一个小项目,该项目让我处理长度在四万及以上的数字。
我目前正在使用 BigInteger 来处理这些值,我需要执行速度更快的东西。我读过 BigInteger 在它的实现中使用了一个整数数组,我需要知道的是 BigInteger 是否使用这个数组中的每个索引来表示每个小数点,如 1 - 9,或者它是否使用更有效的东西.
我问这个是因为我已经想到了一个使用位操作的实现,这使得它在内存和处理方面更高效。
所以最后一个问题是 - BigInteger 是否已经足够高效,我应该只依赖它吗?最好知道这一点,而不是不必要地进行测试,这会花费很多时间。
谢谢。
最佳答案
至少对于 Oracle 的 Java 8 和 OpenJDK 8,它不会为每个 int
存储一位小数。它在 int[]
中为每个 32 位 int
存储完整的 32 位部分,这可以通过 its source code 查看。 .
位运算对它来说很快,因为它是一个符号幅度值,并且幅度按照您的预期打包存储,只需确保您使用 the relevant BigInteger
bitwise methods而不是实现您自己的。
如果您仍然需要更快的速度,请尝试类似 GMP 的方法,但请注意它使用 LGPL 或 GPL 许可证。在 Java 之外使用它也会更好。
关于Java 的 BigInteger 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52704490/