Подтвердить что ты не робот

Выполнение заказа списка в 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: Кажется, я нерешительна. Мне нужна упорядоченная карта, а не отсортированная. Извините за путаницу, люди.

4b9b3361

Ответ 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());