Как сгенерировать уникальный идентификатор, который является целым числом в java, который не угадает следующий номер?
Как создать уникальный идентификатор в Java (Integer)?
Ответ 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, который будет уникальным для сервера, а затем просто добавить серийный номер.
Ответ 4
Ответ 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);