Все зависит от размеров строк и т.д.
Вы можете сделать все виды вещей.
Вы можете использовать двоичный поиск, чтобы получить индекс в списке, а по этому индексу - идентификатор.
Вы можете хэшировать только первые 2 символа, а не всю строку, которая, вероятно, будет быстрее, чем двоичный поиск, если строки имеют распределение ОК.
Вы можете использовать первый символ или первые два символа, если они уникальны как «идеальный индекс» в массиве 255 или 65K, который указывает на идентификатор.
Кроме того, если ваш идентификатор является числовым, лучше предварительно вычислить это, а не преобразовывать его на лету все время. Текст -> Двоичный на самом деле довольно дорогой (Binary -> Text хуже). Поэтому, вероятно, приятно избегать этого, если это возможно.
Но вам надлежит работать. 1 миллион всего на 1 мс каждый, составляет 20 минут обработки. На 500 м каждая нано-секунда впустую добавляет до 8+ минут дополнительной обработки. Вы можете не беспокоиться, но просто демонстрируете, что в этих масштабах «каждый бит помогает».
Итак, не принимайте наши слова за это, проверяйте разные вещи, чтобы найти то, что дает вам лучший результат для вашего рабочего набора, а затем идите с этим. Также рассмотрите чрезмерное создание объекта и избегайте этого. Обычно я не задумываюсь. Создание объекта происходит быстро, но нано-секунда - нано-секунда.
Если вы работаете на Java и вам не нужен UNICode (т. Е. Вы работаете с одиночными символами диапазона 0-255), я бы вообще не использовал строки. Я бы работал с необработанными байтами. Строки основаны на символах Java, которые являются UTF-16. Читатели Java конвертируют UTF-8 в UTF-16 каждый. Один. время. 500 миллионов раз. Ага! Еще несколько наносекунд. 8 наносекунд добавляет час к обработке.
Итак, снова, посмотрите во всех углах.
Или, не надо, напишите это легко, запустите его, запустите в выходные и сделайте с ним.
Ваш вопрос непонятен. Просьба уточнить, что означает каждый вариант. Откуда берутся идентификаторы? Что вы подразумеваете под «процессом» их 500 миллионов раз? Являются ли идентификаторы из плотного множества (т. Е. Смежные целые числа, скажем, 1-450)? Если нет, то как выглядит распределение. Здесь отсутствует большая информация, и эта информация будет очень важна при выборе структуры данных. –
Не могли бы вы также создать класс с двумя полями 'theString' и' theIdentifier'? – DaoWen
Это, вероятно, не имеет значения, каким образом вы это сделаете. Накладные расходы на «получение» строки и/или обработку их после поиска могут значительно превышать накладные расходы процесса «идентификации» строки. (И если нет ... вам нужно объяснить более широкий контекст.) –