質問

Iを生成しなければならないユニークな番号の32ビットJava.私に戻る必要があるのJava intである必要はインターフェース。ありがとうございます。もアイデア。

数として使用しますMySQL PKおよび複数のスレッドが生成は、独自のidです。(すいませんのでないことを決定したMySQLの増id)

またUUIDのクラスがそのデータを生成する超ビット以上で利用します。

こないだ作品:

    // seems no way to get int
    UUID id = UUID.randomUUID();
    System.out.println(id);

    // not working either?
    java.rmi.server.UID uid = new java.rmi.server.UID();
    System.out.println(uid.toString());

    // the one i am using
    SecureRandom prng = SecureRandom.getInstance("SHA1PRNG");
    prng.setSeed(System.currentTimeMillis());
    int ret = prng.nextInt();
    System.out.println(ret);
役に立ちましたか?

解決

どのように"ならではの"いい?短のように衝突ンロードすることは可能です。を取扱っている場合は数千のキーその後 かせとなります。nextInt() いいただけたらと思ってい相対的に何をしたバージョン4Uuid(UUID v4生128ランダムなのです。

あなたが必要といってもいい出来になっているの少ない衝突しが必要となり世界的に増分を整数であ介する"アドベンチャーパークなどの状態保持の間のJVMできるサービスです。そしておくとよいでしょうへ AtomicIntegers.

他のヒント

SecureRandomアプローチは結構ですが、それにシードを設定しないでください。これは、(おそらく)安全な方法でそれ自身のシードを選択します。

また、UUIDを使用し、ちょうどあなたが必要のないビットを捨てることができ、例えばます。

int key = (int)UUID.randomUUID().getLeastSignificantBits();
EDIT:あなたはまた、SecureRandomRandomよりも大幅に遅くなることに注意する必要があります。あなたがここに暗号化を行っていないので、なぜRandomを使わないのでしょうか?

私は、あなたが32ビットのハッシュ関数を使用することができると思います。 詳細については、次のチュートリアルに記載されています http://www.concentric.net/~ttwang/tech/inthash.htm

private static int hash(int key){

          key = ~key + (key << 15); // key = (key << 15) - key - 1;
          key = key ^ (key >>> 12);
          key = key + (key << 2);
          key = key ^ (key >>> 4);
          key = key * 2057; // key = (key + (key << 3)) + (key << 11);
          key = key ^ (key >>> 16);
          return key;

    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top