Вопрос-ответ

How to sort a HashMap in Java [duplicate]

Как отсортировать хэш-карту в Java

Как мы можем отсортировать HashMap<key, ArrayList>?

Я хочу отсортировать на основе значения в ArrayList.

Переведено автоматически
Ответ 1

Обязательно ли использовать хэш-карту? Если вам нужен только интерфейс карты, используйте древовидную карту


Если вы хотите выполнить сортировку путем сравнения значений в хэш-карте. Для этого вам нужно написать код, если вы хотите сделать это один раз, вы сможете отсортировать значения вашей хэш-карты.:

Map<String, Person> people = new HashMap<>();
Person jim = new Person("Jim", 25);
Person scott = new Person("Scott", 28);
Person anna = new Person("Anna", 23);

people.put(jim.getName(), jim);
people.put(scott.getName(), scott);
people.put(anna.getName(), anna);

// not yet sorted
List<Person> peopleByAge = new ArrayList<>(people.values());

Collections.sort(peopleByAge, Comparator.comparing(Person::getAge));

for (Person p : peopleByAge) {
System.out.println(p.getName() + "\t" + p.getAge());
}

Если вы хотите часто обращаться к этому отсортированному списку, то вы могли бы вставить свои элементы в HashMap<TreeSet<Person>>, хотя семантика наборов и списков немного отличается.

Ответ 2

Список отсортирован по ключам hasmap:

SortedSet<String> keys = new TreeSet<String>(myHashMap.keySet());

Список отсортирован по значениям хэш-карты:

SortedSet<String> values = new TreeSet<String>(myHashMap.values());

В случае дублирования значений карты:

List<String> mapValues = new ArrayList<String>(myHashMap.values());
Collections.sort(mapValues);

Удачи!

Ответ 3

http://snipplr.com/view/2789/sorting-map-keys-by-comparing-its-values/

получить ключи

List keys = new ArrayList(yourMap.keySet());

Сортируйте их

 Collections.sort(keys)

распечатайте их.

В любом случае, вы не можете иметь отсортированные значения в HashMap (согласно API This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time ].

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

Ответ 4

Похоже, вам может понадобиться древовидная карта.

http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html

Вы можете передать к ней пользовательский компаратор, если это применимо.

2024-02-29 10:56 java