在我的程序中,我随机地生成一些标识符来标识一些字符。示例:
12555678 to identify 'a'
12 to identify 'g'
13456789900000076 to identify 'c'
...
在我的算法中,我无法知道这些标识的大小。所以,我使用BigInteger
数。我想减少内存,那么当我生成一个标识符12
时,如果我可以使用另一个类型(不是BigInteger),我可以在内存中获胜。所以我的问题是,有没有可能使用另一种类型来操作内存,并且只租用我的标识符的确切大小?
谢谢
发布于 2012-10-26 18:09:31
BigInteger
的大小与表示该数字所需的大小一样大(加上一些开销)
如果你可以用Long
代替,它会更小(因为它有更少的开销),使用小于Long的类型不会有太大的区别,因为开销是相同的。
如果您可以使用64位有符号值,那么使用long
比使用Long
要小5倍,所以如果内存很重要,我会找到一种方法将自己限制在18万亿个标识符。
发布于 2012-10-26 18:09:07
您可以将字段声明为Number
类型,这将允许BigInteger
s以及Integer
s甚至Short
s。
根据您打算对值调用的方法,您可能需要专门检查BigInteger
的情况,并向下强制转换以单独处理它。其他的一切都可以通过number.longValue()
来处理。
这样做意味着您的引用能够在需要时保留BigInteger
,但您可以在值允许的情况下传入Short
以节省内存。
https://stackoverflow.com/questions/13084827
复制相似问题