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

21
задан Sajad Bahmani 23 February 2013 в 08:09
поделиться

8 ответов

Насколько оно должно быть уникальным?

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

54
ответ дан 29 November 2019 в 00:56
поделиться
int uniqueId = 0;

int getUniqueId()
{
    return uniqueId++;
}

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

8
ответ дан Mark Byers 23 February 2013 в 08:09
поделиться
1
ответ дан Chris Jester-Young 23 February 2013 в 08:09
поделиться

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

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

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

2
ответ дан Pete Kirkham 23 February 2013 в 08:09
поделиться
 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();
        }
    }

}

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

1
ответ дан adatapost 23 February 2013 в 08:09
поделиться

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

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

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

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

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

return (myID << 16) & uniqueID++

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

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

4
ответ дан 29 November 2019 в 00:56
поделиться

Селектор jQuery возвращает массив, чтобы просто получить его длину. Например:

jQuery(".image").Length

Если вам нужны более сложные запросы выбора, обратитесь к странице jQuery Selectors . Вы сказали, что все изображения в div запрос вы бы использовать что-то вроде jQuery («div # divName img»)

-121--4716477-
$(".divClassName").find("img").length

это то, что вы ищете?

-121--4716478-

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

1
ответ дан 29 November 2019 в 00:56
поделиться

Должен ли он быть;

  • уникальным для двух JVM, работающих в одно и то же время.
  • уникальна, даже если JVM перезапускается.
  • поточно-ориентированный.
  • поддержка null? в противном случае используйте int или long.
1
ответ дан 29 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: