Как кодировать строку в уникальный длинный? - PullRequest
0 голосов
/ 16 апреля 2020

Сервер отправляет alphanumerical идентификаторы для списка элементов. В то же время, представление утилиты getItemId (требуется для стабильных идентификаторов) должно возвращать Long. Как закодировать строку в уникальный long?

1 Ответ

0 голосов
/ 17 апреля 2020

Краткий ответ: вы, вероятно, не можете. Если только идентификаторы не гарантированно будут короткими.

A Long использует 8 байтов, поэтому он может содержать 2⁶⁴ (около 1,8 × 10¹⁹) различных значений. Таким образом, он может представлять только это количество строк. (В результате применения принципа pigeonhole .)

Однако, если идентификаторы содержат только базовые c буквы ASCII (предположим, в верхнем регистре) и цифры - 36 вариантов - и 13 символов долго, то есть 36¹³ (около 1.7 × 10²⁰) разных строк. Это на порядок больше, чем 2⁶⁴, поэтому некоторым из них придется сопоставить одно и то же значение Long.

(Фактически, каждый Long будет отображать в среднем около 10 идентификаторов - и даже больше, если вы включите строки с меньшим количеством символов и / или большим диапазоном символов.)

Таким образом, если диапазон идентификаторов не ограничен, вам придется найти другой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...