Уникален хеш GUID?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

21
задан Peter Mortensen 17 July 2016 в 21:29
поделиться

7 ответов

Не так надежно уникальный как сам GUID, нет.

Только для расширения Вы уменьшаете свою уникальность фактором 4, идя от 16 байтов до 4 байтов возможных комбинаций.

, Как указано в комментариях размер хэша будет иметь значение. 4-байтовой вещью было предположение, ужасное в лучшем случае, я знаю, что она может использоваться в.NET, где размер хэша по умолчанию составляет 4 байта (интервал). Таким образом, можно заменить то, что я сказал выше с любым размером байта хеш может быть.

20
ответ дан 29 November 2019 в 20:25
поделиться

Нет.

Видят здесь, если Вы хотите мини-GUID: http://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

9
ответ дан 29 November 2019 в 20:25
поделиться

Одним словом, нет.

Позволяют нам предположить, что Ваш хеш имеет меньше битов, чем GUID, принципом дыры голубя, там должен существовать больше чем одно отображение некоторого GUID-> хеш просто, потому что существует меньше хешей, чем ГУИДЫ.

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

7
ответ дан 29 November 2019 в 20:25
поделиться

Никакая хеш-функция, которая уменьшает произвольный размерный блок данных до числа фиксированного размера битов, не произведет 1 к 1 отображение между двумя. Там будет всегда существовать шанс наличия двух различных блоков данных быть уменьшенным до той же последовательности битов в хеше.

Хорошие хеш-алгоритмы минимизирует вероятность этого случая, и обычно, чем больше битов в хеше, тем менее случайный из коллизии.

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

Это не guranteed, чтобы быть, из-за хэш-коллизии . Сам GUID, как почти гарантируют, будет.

По практическим причинам, вероятно, можно ли предположить, что хеш уникален, но почему бы не использовать сам GUID?

2
ответ дан 29 November 2019 в 20:25
поделиться

Нет, и я не принял бы уникальности никакого значения хэш-функции. Это не должно иметь значения, потому что для значений хэш-функции не нужно к уникальному, им просто нужно к равномерно распределенному через их диапазон. Чем более ровный распределение, тем меньше коллизий происходит (в хеш-таблице). Меньше коллизий означает лучшую производительность хеш-таблицы.

к вашему сведению Для хорошего описания того, как хэш-таблицы работают, прочитайте принятый ответ на , Что такое хеш-таблицы и hashmaps и их типичные варианты использования?

2
ответ дан 29 November 2019 в 20:25
поделиться

При использовании криптографического хеша (MD5, SHA1, RIPEMD160), хеш будет уникален (коллизии по модулю, которые являются очень невероятными - SHA1 используется, например, для цифровых подписей, и MD5 является также стойким к коллизии на случайные исходные данные ). Хотя, почему Вы хотите хешировать GUID?

0
ответ дан 29 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

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