2017-04-14 74 views
3

我有一些JSON来到我的Java程序。它有一个特定的领域,有六个固定的数字:0,30,60,120,240或480. Java可以选择比short更好的数据类型吗?也许通过使用某种形式的枚举或通过利用事先知道固定输入来表示输入位数?输入固定号码的最有效的数据类型

关于枚举,它们似乎是针对不同用例的,从Oracle Java文档中可以看出,它看起来像是使用枚举,它仍然会在内部创建一个int,所以我没有看到最终在速度或记忆中获得任何优势。有什么我失踪?

我试图谷歌,但还没有得到一个合适的答案。

+0

只有这些数字是0,30,60,120,240和480。或者你可以拥有比这更多的数字? –

+2

除非需要一些非常具体的优化,否则我只是使用'int'而不用担心它。 – Armand

+0

你的“最高效”的概念是什么?内存大小?然后使用一个字节。编程时间?坚持int。除非你转移了数百万的这些数字,否则无论如何都不会有太大的改变。 – Axel

回答

3

首先,观察到从您的示例的数字遵循一定的模式 - 它们是从乘以30的二的幂构造:

  • 0 - 0 - 0*30
  • 1 - 2 - 1*30
  • 2 - 2 - 2*30
  • 4 - 2 - 4*30
  • 8 - 2 - 8*30
  • 16 - 2 - 16*30

如果存储0和5之间的小数目,包容,可以计算目标数回任用查找表,或用简单的比特移位的表达式:

byte b = ... // Store the value in a variable of type "byte" 
int num = b!=0 ? 30*(1<<(b-1)): 0; 

注:由于enum是一个成熟的类,它通常会使用比原始数字更多或更多的空间。

+0

感谢您的回答,我认为它不会比这更有效率,因此接受答案。 –