Реализация карты упорядоченного списка на Java
Вопрос
Мне было интересно, существует ли какой-нибудь класс, который реализует как Map
и List
интерфейсы на Java.
У меня есть структура данных, которая в первую очередь является Map
.Я сопоставляю строки (идентификаторы) с Image
s.Но в определенной части моего кода мне нужно предоставить пользователю все доступные IDed Images
.Единственный способ сделать это на данный момент - написать это:
for (String id : myMap.keySet()) {
// get the image like this "myMap.get(id)"
}
Поэтому было бы неплохо иметь класс, который реализует и то, и другое Map
и List
так что я мог бы просто написать:
for (Image img : myMap) {
// the image is img
}
Кто-нибудь знает о такой реализации?
Редактировать:После просмотра ответов (все они правильные, проголосованы за), теперь я понимаю, что мне также нужно было бы отсортировать карту.Когда я говорю "отсортировано", все, что я имею в виду, это то, что я хотел бы, чтобы значения располагались в определенном порядке, который я мог бы изменять.Я знаю, что это не первоначальный вопрос, но я только что понял, что мне это нужно.
ПРАВКА 2:Кажется, я в нерешительности.Что мне нужно, так это упорядоченная карта, а не отсортированная.Народ, извините за путаницу.
Решение
Если вам нужны ваши товары в определенном порядке, LinkedHashMap - ваш друг - он хранит элементы в порядке вставки. TreeMap будет хранить ваши элементы в порядке, определяемом указанным вами компаратором или методом сравнения ключа.
Другие советы
Заказанную Карту смотрите в LinkedHashMap код>
. Это будет держать ваши ключи в порядке вставки.
Если вы используете SortedMap код>
будет держать ключи в отсортированном порядке. ( TreeMap
является наиболее распространенной реализацией.)
Вы можете использовать map.entrySet ()
. Это позволит вам перебирать набор MapEntries.
Ознакомьтесь с javadoc для получения дополнительной информации.
У вас уже есть куча практических ответов. Но отвечая прямо на вопрос ...
Я бродил, если есть класс, который реализует интерфейсы Map и List в Java.
... стоит упомянуть, что это просто невозможно. Метод remove (Object)
является препятствием.
В интерфейсе Map
его подпись:
V remove(Object key);
И в интерфейсе List
это:
boolean remove(Object o);
вы можете использовать Map.values()
метод, который возвращает Collection
.
Это дает вам коллекцию сохраненных значений
myMap.values()
Попробуйте это:
for (Image img : myMap.values()) {
// the image is img
}
Для отсортированной карты посмотрите java. .util.SortedMap
реализации. java.util.TreeMap
- самый частый выбор. Если вам нужен только гарантированный порядок итераций, вы можете попробовать java.util.LinkedHashMap код>
. Он предлагает итерацию в том же порядке, в котором вы размещаете элементы на карте. Или, опционально, в порядке последнего доступа. Если вы хотите переместить ключ (после добавления) в конец карты, вы должны явно удалить его и поставить снова. Р>
вы можете использовать Древовидная карта он сортируется в соответствии с естественным порядком его ключей или с помощью компаратора, предоставленного во время создания карты:
TreeMap<String, Image> mapByName = new TreeMap<String, Image>(new ByNameComparator());
где ByNameComparator() - это компаратор.В качестве альтернативы вы можете использовать метод values() и выполнить сортировку с помощью Collections.sort():
Collection<Image> images = mapByName.values();
Collections.sort(images, new BySizeComparator());