Java能否在循环中优化"变异"BigInteger操作?

Cub*_*bic 10 java

我需要处理很多比大(> 10 ^ 200)大的数字,所以我使用BigIntegers.我执行的最常见操作是将它们添加到累加器,例如:

BigInteger A = new BigInteger("0");
for(BigInteger n : nums) {
    A = A.add(n);
}
Run Code Online (Sandbox Code Playgroud)

当然,为破坏性操作制作副本是非常浪费的(好吧,只要有足够大的缓冲区可用),所以我想知道Java是否可以以某种方式优化它(我听说有一个MutableBigInteger类没有被math.java暴露)或者我是否应该编写自己的BigInteger类.

Ste*_*n C 2

是的,有一个java.math.MutableBigInteger类用于BigInteger计算密集型操作。不幸的是,它被声明为包私有,所以你不能使用它。Apache Commons 库中还有一个“MutableBigInteger”类,但它只是 BigInteger 的可变包装器,对您没有任何帮助。

我想知道 Java 是否可以以某种方式优化它......

不……尽管有上述规定。

或者我是否应该编写自己的 BigInteger 类。

这是一种方法。

另一种方法是下载 OpenJDK 源代码,找到 的源代码java.math.MutableBigInteger,更改其包名称和访问权限,并将其合并到您的代码库中。唯一的障碍是 OpenJDK 是根据 GPL(我认为是 GPL-2)获得许可的,如果您使用修改后的类分发代码,这会产生影响。

也可以看看: