在我的程序中,我生成一些ramdomly标识符来标识一些字符。例如:
12555678 to identify 'a'
12 to identify 'g'
13456789900000076 to identify 'c'
...
在我的算法中,我不知道这些标识的大小是多少。所以,我使用BigInteger
个数字。我想减少内存,然后当我生成一个标识符12
时,如果我可以使用其他类型(不是BigInteger),我可以在内存中获胜。所以我的问题是,是否可以使用其他类型来操作内存并仅租用我的标识符的确切大小?
由于
答案 0 :(得分:5)
BigInteger
与表示数字所需的一样大(加上一些开销)
如果你可以使用Long
,它会更小(因为它的头部较少)使用小于Long的类型不会产生太大的差异,因为头顶是相同的。
如果你可以使用64位有符号值,使用long
比使用Long
小5倍,所以如果内存很重要,我会找到一种方法将自己限制在18万亿万亿标识符。
答案 1 :(得分:0)
您可以将字段声明为Number
类型,这样就可以BigInteger
以及Integer
甚至Short
。
根据您打算在值上调用的方法,您可能需要专门检查BigInteger
大小写,并向下转发以单独处理它。其他所有内容都可以通过number.longValue()
处理。
执行此操作意味着您的引用具有能力以在需要时保留BigInteger
,但您可以在值允许时传入Short
以节省内存。