Отображение String в целое число - производительность различных подходов

Допустим, мне нужно преобразовать String в целое число. Целые числа уникальны и образуют непрерывный диапазон, начиная с 0. То есть:

Hello -> 0
World -> 1
Foo   -> 2
Bar   -> 3
Spam  -> 4
Eggs  -> 5
etc.

Есть как минимум два простых способа сделать это. С помощью хэш-карты:

HashMap<String, Integer> map = ...
int integer = map.get(string); // Plus maybe null check to avoid NPE in unboxing.

Или со списком:

List<String> list = ...
int integer = list.indexOf(string); // Plus maybe check for -1.

Какой подход мне следует использовать и почему? Возможно, относительная производительность зависит от размера списка / карты, поскольку List # indexOf () - это линейный поиск с использованием String # equals () -> O (n) эффективности, в то время как HashMap # get () использует хэш для сужения поиска -> определенно более эффективен, когда карта большая, но, возможно, хуже, когда есть всего несколько элементов (должны быть некоторые накладные расходы при вычислении хеша, правильно?).

Поскольку тестирование Java-кода должным образом является сложной задачей, Я хотел бы получить несколько обоснованных предположений. Правильно ли мое рассуждение выше (список лучше для маленького, карта лучше для большого)? Какой приблизительно размер порога? В чем разница между реализациями List и HashMap ?

8
задан Joonas Pulakka 21 October 2010 в 12:03
поделиться