1

Java で比較的一意の ID を提供するユーティリティを作成したいと考えています。タイムスタンプからの x ビット + 乱数からの y ビットのような、かなり単純なもの。

では、次のメソッドをどのように実装しますか。

long getUniqueID()
{
    long timestamp = System.currentTimeMillis();
    long random = some random long

    ...

    return id;
}

ボーナス

ID の作成に使用できる、簡単に取得できるその他の情報について何か提案はありますか?

注: 私は GUID を認識しており、Java に UUID クラスがあることは知っていますが、128 ビット長のものは必要ありません。

4

3 に答える 3

3

必要のないビットを切り取るだけです。

return java.util.UUID.randomUUID().getLeastSignificantBits();
于 2008-11-25T15:05:19.057 に答える
1

同じJVMで一意である場合は、このようなもので十分です。

public class UniqueID {
  static long current= System.currentTimeMillis();
  static public synchronized long get(){
    return current++;
    }
}
于 2008-11-25T22:27:56.837 に答える
1

あなたがしようとしているのは、2 つの long 値を 1 つの long 値に結合するハッシュ関数を作成することです。この場合、作成された一意の ID 値の衝突は許容できないため、ハッシュ関数の均一性が最も重要になります。ただし、ハッシュ値を以前に作成した識別子と比較できる場合は、衝突が発生しなくなるまでハッシュを変更することで衝突を解決できます。

たとえば、タイム スタンプを取得し、ランダムな値で (Java のキャレット ^ 演算子を使用して)排他的論理和を実行できます。衝突が検出された場合は、結果に 1 を追加します。

于 2008-11-25T15:05:07.963 に答える