ビットを組み立てて一意のIDを作成するにはどうすればよいですか?
質問
Javaで比較的一意のIDを提供するユーティリティを作成したいと思います。タイムスタンプからのxビット+乱数からのyビットのように、非常に単純なもの。
では、次のメソッドをどのように実装しますか:
long getUniqueID()
{
long timestamp = System.currentTimeMillis();
long random = some random long
...
return id;
}
ボーナス
IDの作成に使用できる他の簡単に入手できる情報についての提案はありますか?
注:私はGUIDを認識しており、JavaにはUUIDクラスがあることを知っていますが、128ビットの長さは必要ありません。
解決
不要な部分だけを切り取ってください:
return java.util.UUID.randomUUID().getLeastSignificantBits();
他のヒント
やろうとしているのは、2つの長い値を組み合わせたハッシュ関数を作成することです単一のlong値。この場合、ハッシュ関数の均一性は、作成された一意のID値は受け入れられません。ただし、ハッシュ値を以前に作成した識別子と比較できる場合は、衝突が発生しなくなるまでハッシュを変更することで衝突を解決できます。
たとえば、タイムスタンプを取得して、 exclusive-or ( Javaのキャレット^演算子)とランダムな値。衝突が検出された場合は、結果に衝突を追加します。
同じJVM内で一意であれば十分な場合は、このようなもので十分です。
public class UniqueID {
static long current= System.currentTimeMillis();
static public synchronized long get(){
return current++;
}
}
所属していません StackOverflow