Выполнение заказа списка в Java
Мне было интересно, есть ли класс, который реализует интерфейсы Map
и List
в Java.
У меня есть структура данных, которая в основном является Map
. Я сопоставляю строки (ID) с 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
}
Кто-нибудь знает о такой реализации?
РЕДАКТИРОВАТЬ: после просмотра ответов (которые все правильно, проголосовали), теперь я понимаю, что мне также понадобится сортировка карты. Когда я говорю "отсортировано", все, что я имею в виду, это то, что я хотел бы, чтобы он имел значения в определенном порядке, который я мог бы изменить. Я знаю, что это не оригинальный вопрос, но я просто понял, что мне это нужно.
EDIT 2: Кажется, я нерешительна. Мне нужна упорядоченная карта, а не отсортированная. Извините за путаницу, люди.
Ответы
Ответ 1
Если вам нужны ваши товары в определенном порядке, LinkedHashMap является вашим другом - он сохраняет позиции в порядке размещения. TreeMap будет хранить ваши элементы в порядке, определенном вами либо Компаратором, который вы даете, либо методом compareTo ключа.
Ответ 2
Для упорядоченной карты просмотрите LinkedHashMap
. Это будет держать ваши ключи в порядке вставки.
Если вы используете SortedMap
, он сохранит ключи в отсортированном порядке. (TreeMap
является наиболее распространенной версией.)
Что вы можете использовать, это map.entrySet()
. Это позволит вам перебирать Set MapEntries.
Узнайте о javadoc для получения дополнительной информации.
Ответ 3
У вас уже есть куча практических ответов. Но отвечая непосредственно на вопрос...
Я блуждал, если есть класс, который реализует оба интерфейса Map и List в Java.
... Стоит упомянуть, что это просто невозможно. remove(Object)
- препятствие.
В интерфейсе Map
его подпись:
V remove(Object key);
И в интерфейсе List
это:
boolean remove(Object o);
Ответ 4
вы можете использовать метод Map.values()
, который возвращает Collection
.
Ответ 5
Это дает вам набор сохраненных значений
myMap.values()
Ответ 6
Попробуйте следующее:
for (Image img : myMap.values()) {
// the image is img
}
Для отсортированной карты смотрите java.util.SortedMap
. java.util.TreeMap
является наиболее часто используемым. Если вам нужен только гарантированный порядок итераций, вы можете попробовать java.util.LinkedHashMap
. Он предлагает итерацию в том же порядке, что и элементы для отображения. Или, необязательно, в порядке последнего доступа. Если вы хотите переместить ключ (после добавления) в конец карты, вы должны явно удалить его и снова поставить.
Ответ 7
вы можете использовать TreeMap, он сортируется в соответствии с естественным упорядочением его ключей или компаратором при создании карты время:
TreeMap<String, Image> mapByName = new TreeMap<String, Image>(new ByNameComparator());
где ByNameComparator() является компаратором. В качестве альтернативы вы можете использовать значения() methond и сортировать с помощью Collections.sort():
Collection<Image> images = mapByName.values();
Collections.sort(images, new BySizeComparator());