Pregunta

Me gustaría escribir una utilidad que me proporcione una identificación relativamente única en Java. Algo bastante simple, como x bits de marca de tiempo + y bits de número aleatorio.

Entonces, ¿cómo implementaría el siguiente método:

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

    ...

    return id;
}

BONIFICACIÓN

¿Alguna sugerencia para otra información fácilmente obtenible que pueda usar para formar mi ID?

nota: conozco los GUID y sé que Java tiene una clase UUID, pero no quiero algo que tenga 128 bits de largo.

¿Fue útil?

Solución

Simplemente recorte los bits que no necesita:

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

Otros consejos

Lo que está intentando hacer es crear una función hash que combina dos valores largos en Un solo valor largo. En este caso, la uniformidad de la función hash será de suma importancia ya que las colisiones en Los valores de ID únicos creados son inaceptables. Sin embargo, si puede comparar valores hash con identificadores creados previamente, las colisiones se pueden resolver modificando el hash hasta que no se produzca una colisión.

Por ejemplo, puede tomar la marca de tiempo y realizar una exclusive-or (usando el operador caret ^ en Java) con el valor aleatorio. Si se detecta una colisión, agregue una al resultado.

Si un único en la misma JVM es suficiente, entonces algo como esto debería hacer el trabajo.

public class UniqueID {
  static long current= System.currentTimeMillis();
  static public synchronized long get(){
    return current++;
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top