Как создать уникальный идентификатор в Java (Integer)?
Как создать уникальный идентификатор, который является целым числом в java, который не угадывает следующее число?
9 ответов
насколько уникальным он должен быть?
если он уникален только в процессе, то вы можете использовать AtomicInteger и звонок incrementAndGet() каждый раз, когда вам понадобится новое значение.
int uniqueId = 0;
int getUniqueId()
{
    return uniqueId++;
}
добавить synchronized Если вы хотите, чтобы быть потокобезопасными.
Это легко, если вы несколько стеснены.
Если у вас есть один поток, вы просто используете uniqueID++; обязательно сохраните текущий uniqueID при выходе.
Если у вас несколько потоков, работает общий синхронизированный метод generateUniqueID (реализованный так же, как и выше).
проблема в том, что у вас много процессоров-либо в кластере, либо в какой-то распределенной настройке, такой как одноранговая игра.
в этом случае вы обычно можете объединить два части, чтобы сформировать один номер. Например, каждому процессу, генерирующему уникальный идентификатор, может быть присвоен его собственный 2-байтовый идентификатор, а затем объединить его с uniqueID++. Что-то вроде:
return (myID << 16) & uniqueID++
может быть сложно распределить часть "myID", но есть несколько способов. Вы можете просто взять один из централизованной базы данных, запросить уникальный идентификатор с централизованного сервера ...
Если у вас был длинный вместо Int, один из распространенных трюков-взять идентификатор устройства (UUID) ETH0, это гарантированно будет уникальным для сервера, а затем просто добавьте серийный номер.
просто сгенерируйте ID и проверьте, присутствует ли он уже или нет в вашем списке сгенерированных идентификаторов.
Если вы действительно имели в виду целое число, а не int:
Integer id = new Integer(42); // will not == any other Integer
Если вы хотите, чтобы что-то было видно за пределами JVM другим процессам или пользователю, постоянному или множеству других соображений, тогда есть другие подходы, но без контекста вам, вероятно, лучше использовать встроенную уникальность идентификатора объекта в вашей системе.
тебе нужно;
- уникально между 2 JVMs бежать на в то же время.
- уникальный, даже если JVM перезапускается.
- потокобезопасным.
- поддержка null? если не использовать int или long.
 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();
        }
    }
}
надеюсь, это поможет вам.
