Instant
あなたはタイムスタンプをしたい場合、我々はすでにそのためのクラスを持っている:Instant
はnanosecondsまでの分解能でUTCでタイムライン上の瞬間を表しています。
Java 8では、現在の瞬間がミリ秒までの解像度でキャプチャされます。 Java 9では、Clock
の新しい実装では、コンピュータのクロックハードウェアに応じて、現在の瞬間を完全なナノ秒の解像度までキャプチャします。
UUID
しかし、あなたは、分散システム間でオブジェクトを識別するだけで、その目的のために発明種類使用したい場合:Universally Unique Identifier (UUID)を。このタイプは、公式の標準で定義されています。 128ビットの値で、基本的には想像もつかないほど大きい数値ですが、特定のビットには一定の意味があります。
人間の読書では、標準形式で16進文字列が生成されます。
Javaには、このような値を表すUUID
クラスが含まれています。私が思い出しているように、OpenJDKの実装では、内部で64ビットの数字のペアとして格納されています(long
)。
>long
BigInteger
そして、あなたの直接の問題に答えるためには、BigInteger
は効率のために設計されていないginormous数字を表現するために設計されています。 オブジェクトのオーバーヘッドと、CPUレジスタに収まるよりはるかに大きい可能性のある巨大な数を表現し、操作するための機構がないため、プリミティブ(64ビットの数値)はメモリを大幅に使用しません。 long
での操作は、はるかに高速に実行されます。
BigInteger
の機能が不要な場合は、long
プリミティブを使用してください。
どのような効率ですか?スピードかメモリーかその両方?実際のアプリケーションでBigIntegerを長い間テストしましたか? – Nayuki
「2^64」で十分ではないと思う鍵はいくつありますか? – apangin
http://stackoverflow.com/questions/31748028/long-vs-biginteger | http:// stackoverflow。com/questions/12498363/performance-implications-of-using-java-biginteger-for-a-huge-bitmask | http://stackoverflow.com/questions/23603513/increasing-javas-biginteger-performance – Yar