Реализация карты упорядоченного списка на Java

StackOverflow https://stackoverflow.com/questions/1212198

  •  06-07-2019
  •  | 
  •  

Вопрос

Мне было интересно, существует ли какой-нибудь класс, который реализует как Map и List интерфейсы на Java.

У меня есть структура данных, которая в первую очередь является Map.Я сопоставляю строки (идентификаторы) с Images.Но в определенной части моего кода мне нужно предоставить пользователю все доступные 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());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top