201 votes

Comment créer un identifiant unique en Java ?

Je cherche le meilleur moyen de créer un identifiant unique en tant que chaîne en Java.

Tout conseil apprécié, merci.

Je devrais mentionner que j'utilise Java 5.

409voto

aperkins Points 4959

Créer un UUID.

String uniqueID = UUID.randomUUID().toString();

55voto

Michael Borgwardt Points 181658

Si vous voulez des identifiants courts et lisibles par l'homme et que vous avez seulement besoin qu'ils soient uniques par exécution JVM :

private static long idCounter = 0;

public static synchronized String createID()
{
    return String.valueOf(idCounter++);
}    

Modifier : Alternative suggérée dans les commentaires - cela repose sur la « magie » sous le capot pour la sécurité du fil, mais est plus évolutive et tout aussi sûre :

private static AtomicLong idCounter = new AtomicLong();

public static String createID()
{
    return String.valueOf(idCounter.getAndIncrement());
}

24voto

Mitch Wheat Points 169614

java.util.UUID : méthode toString()

19voto

Adamski Points 29884

Voici la valeur de mes deux cents : J'ai déjà implémenté une classe IdFactory qui a créé des ID au format [host name]-[application start time]-[current time]-[discriminator]. Cela garantissait en grande partie que les ID étaient uniques dans toutes les instances JVM tout en gardant les ID lisibles (bien que assez longs). Voici le code au cas où il serait utile :

public class IdFactoryImpl implements IdFactory {
  private final String hostName;
  private final long creationTimeMillis;
  private long lastTimeMillis;
  private long discriminator;

  public IdFactoryImpl() throws UnknownHostException {
    this.hostName = InetAddress.getLocalHost().getHostAddress();
    this.creationTimeMillis = System.currentTimeMillis();
    this.lastTimeMillis = creationTimeMillis;
  }

  public synchronized Serializable createId() {
    String id;
    long now = System.currentTimeMillis();

    if (now == lastTimeMillis) {
      ++discriminator;
    } else {
      discriminator = 0;
    }

    // creationTimeMillis used to prevent multiple instances of the JVM
    // running on the same host returning clashing IDs.
    // The only way a clash could occur is if the applications started at
    // exactly the same time.
    id = String.format("%s-%d-%d-%d", hostName, creationTimeMillis, now, discriminator);
    lastTimeMillis = now;

    return id;
  }

  public static void main(String[] args) throws UnknownHostException {
    IdFactory fact = new IdFactoryImpl();

    for (int i=0; i<1000; ++i) {
      System.err.println(fact.createId());
    }
  }
}

11voto

udaykiran pulipati Points 1804

Générer un ID unique à l'aide de Java

UUID est le moyen le plus rapide et le plus facile de générer un identifiant unique en Java.

import java.util.UUID;

public class UniqueIDTest {
  public static void main(String[] args) {
    UUID uniqueKey = UUID.randomUUID();
    System.out.println (uniqueKey);
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X