2017-04-14 3 views
3

私のJavaプログラムにはJSONがあります。これには、0、30、60、120、240、または480の6つの固定数を持つ特定のフィールドがあります。Javaではshortよりも優れたデータ型を選択できますか?たぶん、何らかの形式の列挙型を使うか、あらかじめ固定入力を知っていることを利用してビット単位で入力を表現するか?固定数の入力に最も効率的なデータ型

enumについては、別のユースケースのために作られているようですが、enumのOracle Java docsから見れば、内部的にintを生成するように見えます究極的にはスピードやメモリの利点です。私が行方不明のものはありますか?

私はGoogleに試みましたが、まだ適切な回答を得ることができませんでした。彼らは、30を乗じた2の累乗から構成されている -

+0

これらの数字だけが0,30,60,120,240,480です。またはこれ以上の数字を持つことができますか? –

+2

非常に具体的な最適化が必要な場合を除き、 'int'を使うだけで、心配する必要はありません。 – Armand

+0

「最も効率的」というコンセプトは何ですか?メモリー容量?次に、バイトを使用します。プログラミング時間? intとスティック。あなたが何百万という数字を転送していない限り、それはとにかく大きな違いはありません。 – Axel

答えて

3

まず、あなたの例からの数字は、特定のパターンに従うことを確認: - 0から0*30

  • 1から2

    • 0 - 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

    答えをありがとう、私はそれよりも効率的になることはできないと思う、したがって、答えを受け入れる。 –

    関連する問題