Frage

Wie eindeutige ID zu erzeugen, die eine ganze Zahl ist in Java, dass nicht die nächste Nummer erraten?

War es hilfreich?

Lösung

Wie einzigartig braucht es zu sein?

Wenn es innerhalb eines Prozesses nur einzigartig ist, dann können Sie eine AtomicInteger und Aufruf incrementAndGet() jedes Mal, wenn Sie einen neuen Wert benötigen.

Andere Tipps

int uniqueId = 0;

int getUniqueId()
{
    return uniqueId++;
}

In synchronized wenn Sie es wollen Faden sicher sein.

Es ist einfach, wenn Sie etwas eingeschränkt sind.

Wenn Sie einen Thread haben, verwenden Sie nur uniqueID ++; Seien Sie sicher, dass die aktuelle uniqueID zu speichern, wenn Sie verlassen.

Wenn Sie mehrere Threads haben, eine gemeinsame synchronisierte generateUniqueID Methode funktioniert (Implementiert die gleiche wie oben).

Das Problem ist, wenn Sie viele CPUs haben -. Entweder in einem Cluster oder einer verteilten Umgebung wie ein Peer-to-Peer-Spiel

In diesem Fall können Sie in der Regel zwei Teile kombinieren, um eine einzelne Zahl zu bilden. Beispielsweise kann jeder Prozess, der eine eindeutige ID erzeugt, kann seine eigene 2-Byte-ID-Nummer zugewiesen hat und es dann mit einem uniqueID kombinieren ++. So etwas wie:

return (myID << 16) & uniqueID++

Es kann schwierig sein, den „myID“ Teil der Verteilung, aber es gibt einige Möglichkeiten. Sie können eine nur greifen aus einer zentralen Datenbank, fordern eine eindeutige ID von einem zentralen Server, ...

Wenn Sie eine lange statt eines Int hatte, eine der häufigsten Tricks ist es, die Geräte-ID (UUID) von ETH0 zu nehmen, die auf einem Server garantiert eindeutig ist - dann fügen Sie einfach auf eine Seriennummer

Wenn Sie wirklich gemeint integer anstatt int:

Integer id = new Integer(42); // will not == any other Integer

Wenn Sie etwas sichtbar außerhalb eine JVM auf andere Prozesse oder den Benutzer, persistent wollen, oder mit vielen anderen Überlegungen, dann gibt es andere Ansätze, aber ohne Zusammenhang sind Sie wahrscheinlich besser mit Hilfe des eingebauten in Einzigartigkeit Objektidentität in Ihrem System.

Just ID erzeugen und prüfen, ob es bereits vorhanden ist oder nicht in der Liste der generierten IDs.

Sie benötigen es zu sein;

  • einzigartig zwischen zwei JVMs laufen an die selbe Zeit.
  • einzigartig, auch wenn die JVM wird neu gestartet.
  • Thread-sicher.
  • Unterstützung null? Wenn nicht, verwendet int oder lang.
 import java.util.UUID;

 public class IdGenerator {
    public static int generateUniqueId() {      
        UUID idOne = UUID.randomUUID();
        String str=""+idOne;        
        int uid=str.hashCode();
        String filterStr=""+uid;
        str=filterStr.replaceAll("-", "");
        return Integer.parseInt(str);
    }

    // XXX: replace with java.util.UUID

    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            System.out.println(generateUniqueId());
            //generateUniqueId();
        }
    }

}

Hope, das hilft dir.

Einzigartig jederzeit:

int uniqueId = (int) (System.currentTimeMillis() & 0xfffffff);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top