Существует ли карта Java, которая принимает только одну запись и позволяет получать значения из карты? - PullRequest
3 голосов
/ 03 ноября 2011

Извините, если мои вопросы немного смущают, это немного сложно сформулировать. Я хочу реализовать коллекцию (немного похоже на карту, но для отдельных значений, а не пар), которая выполняет хэш при поиске ее содержимого. Я пытаюсь сделать мои программы действительно эффективными. В настоящее время программа использует HashMap и дважды добавляет в нее первичный ключ из базы данных:

HashMap<Long, Long> userKeys = new HashMap<Long, Long>();
Some operations
userKeys.add(key, key);

Можно ли использовать хэш или карту, чтобы не добавлять ключ дважды? Поскольку это первичный ключ в базе данных, я знаю, что там не будет дубликатов, и поэтому я решил, что хеш-код эффективен.

Я подумал, что Vector может быть хорошим выбором, но когда я посмотрел на метод contains (), он просматривает каждую запись, которая в этом случае будет очень неэффективной.

Я также взглянул на HashSet, но, к сожалению, из того, что я видел, нет способа извлечения значений, чтобы их можно было использовать, в отличие от метода HashMaps.get (Object).

Желаемая настройка:

Collection<Long> userKeys = new Collection<Long>();
Some operations
userKeys.add(key);

Желаемые операции:

userKeys.contains(key) <- здесь используется хеш </p>

userKeys.get(index)

Спасибо заранее, Алексей Блю.

1 Ответ

11 голосов
/ 03 ноября 2011

Я думаю, HashSet - это то, что вы должны использовать - если у вас действительно нет отношения ключ / значение, это должно быть все, что вам нужно.Вы можете получить значения путем перебора набора.

Непонятно, что ваш get(index) должен возвращать ... какой здесь индекс?

Если вам нужно сохранить вставкуДля заказа вы можете использовать LinkedHashSet.

Если вам нужно сохранить порядок вставки и иметь произвольный доступ по порядку вставки (т.е. получить третью запись, добавленную вами через get(2)), тогда выможет сохранять HashSet и ArrayList, синхронизируя их самостоятельно.(Инкапсулируйте их в отдельный тип.) Используйте HashSet для тестов на содержание и ArrayList для произвольного доступа.

...