Подтвердить что ты не робот

Как создать уникальный идентификатор в Java (Integer)?

Как сгенерировать уникальный идентификатор, который является целым числом в java, который не угадает следующий номер?

4b9b3361

Ответ 1

Насколько он уникален?

Если он уникален только в процессе, вы можете использовать AtomicInteger и вызвать incrementAndGet() каждый раз, когда вам нужно новое значение.

Ответ 2

int uniqueId = 0;

int getUniqueId()
{
    return uniqueId++;
}

Добавьте synchronized, если вы хотите, чтобы он был потокобезопасным.

Ответ 3

Это легко, если вы несколько ограничены.

Если у вас есть один поток, вы просто используете uniqueID ++; Обязательно сохраните текущий уникальный идентификатор при выходе.

Если у вас несколько потоков, работает общий синхронизируемый метод generateUniqueID (выполняется так же, как указано выше).

Проблема заключается в том, что у вас много процессоров - либо в кластере, либо в какой-либо распределенной настройке, такой как одноранговая игра.

В этом случае вы можете комбинировать две части, чтобы сформировать один номер. Например, каждый процесс, который генерирует уникальный идентификатор, может иметь собственный 2-байтовый идентификационный номер, а затем объединить его с уникальным идентификатором ++. Что-то вроде:

return (myID << 16) & uniqueID++

Это может быть сложно распределить часть myID, но есть некоторые способы. Вы можете просто захватить один из централизованной базы данных, запросить уникальный идентификатор с централизованного сервера,...

Если у вас был Long, а не Int, один из распространенных трюков - взять идентификатор устройства (UUID) ETH0, который будет уникальным для сервера, а затем просто добавить серийный номер.

Ответ 5

Просто сгенерируйте идентификатор и проверьте, присутствует ли он уже или нет в списке сгенерированных идентификаторов.

Ответ 6

Если вы действительно имели в виду целое число, а не int:

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

Если вы хотите, чтобы что-то видимое вне JVM для других процессов или для пользователя, постоянное или множество других соображений, тогда есть другие подходы, но без контекста вам, вероятно, лучше использовать, используя встроенную уникальность идентификатор объекта в вашей системе.

Ответ 7

Вам это нужно,

  • уникальный между двумя JVM, запущенными на в то же время.
  • уникальный, даже если JVM перезапускается.
  • потокобезопасной.
  • поддержка null? если нет, используйте int или long.

Ответ 8

 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();
        }
    }

}

Надеюсь, это поможет вам.

Ответ 9

Уникальный в любое время:

int uniqueId = (int) (System.currentTimeMillis() & 0xfffffff);