Frage

Ich mag ein Programm schreiben, die mich mit einer relativ eindeutigen ID in Java bieten. Etwas ziemlich einfach, wie x Bits von Zeitstempeln + y Bits aus Zufallszahl.

Also, wie würde ich die folgende Methode implementieren:

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

    ...

    return id;
}

BONUS

Haben Sie Vorschläge für andere leicht zugängliche Informationen, die ich meine ID verwenden könnte bilden?

. Hinweis: Ich bin mir bewusst, GUIDs und ich weiß, Java eine UUID-Klasse hat, aber ich will nicht etwas, das 128 Bit lang ist

War es hilfreich?

Lösung

Sie einfach die Bits Clip Sie nicht brauchen:

return java.util.UUID.randomUUID().getLeastSignificantBits();

Andere Tipps

Was Sie versuchen, ein Hash-Funktion zu tun ist, erstellen, die zwei Long-Werte kombiniert in ein einzelner langer Wert. In diesem Fall wird die Gleichförmigkeit der Hash-Funktion wird seit Kollisionen von größter Bedeutung sein, in erstellt eindeutige ID-Werte sind nicht akzeptabel. Wenn Sie jedoch Hash-Werte auf zuvor erstellte Bezeichner vergleichen können, dann können Kollisionen durch Modifizieren der Hash aufgelöst werden, bis keine Kollision stattfindet.

Zum Beispiel könnten Sie den Zeitstempel nehmen und führen Sie ein Exklusiv-oder (mit die Einfügemarke ^ Operator in Java) mit dem Zufallswert. Wenn eine Kollision erkannt wird, dann fügen Sie ein zum Ergebnis bei.

Wenn einzigartig in der gleichen JVM genug ist, dann so etwas wie dies sollte die Arbeit machen.

public class UniqueID {
  static long current= System.currentTimeMillis();
  static public synchronized long get(){
    return current++;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top