2016-11-15 11 views
1

Я работаю над проектом, где мне нужно сохранить ключ/значения, имеющие несколько дубликатов ключей. Хотя существует много новых реализаций, таких как apache commons и guava, они в основном основаны на одном ключе с несколькими значениями, как показано ниже.Структуры данных Java: карта с дублирующимися ключами и сортировка по значениям

Map<Integer, List<String>> 

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

Пожалуйста, дайте мне знать, есть ли какие-либо существующие реализации или какие-либо идеи для их реализации.

+3

Похоже, вы задаете 2 вопроса: 1) [Как создать карту с дублирующимися ключами?] (http://stackoverflow.com/questions/1062960/map-implementation-with-duplicate-keys) 2) [Как отсортировать карту по значению?] (http://stackoverflow.com/questions/109383/sort-a-mapkey-value-by-values-java) – shmosel

+1

, если вы разделите его на два вопроса, то есть многие ответы уже доступны для него .... но мне нужна карта с повторяющимися ключами для сортировки по значениям ... –

+0

«Возможность сортировки карты», вы имеете в виду, что часто повторяете, поэтому она должна поддерживать отсортированный порядок, или вы просто означаете, что вы периодически повторяете, так что производительность сортировки в начале итерации в порядке? – Andreas

ответ

1

В этом случае вы должны создать свой собственный класс Map и написать код по-своему.

Или вы можете просто скопировать код из класса HashMap в свой класс, а затем внести изменения в этот код для работы по вашему пути. Вы можете найти код HashMap класс от src.zip файл, который будет находиться в вашем каталоге установки JDK.

0

Создайте собственный класс с ключом как свойством и некоторым идентификатором, чтобы определить, являются ли два объекта этого класса одинаковыми .... Переопределите метод equals и hashcode вашего пользовательского класса и используйте объекты своего пользовательского класса в качестве ключа вашей карты ..... значение может быть значением, соответствующим исходному ключу ..... трюк здесь заключается в том, чтобы придумать оптимальный хэш-код и равен реализациям, чтобы обеспечить меньшее количество столкновений ...