Как отсортировать hashmap по значению

Сортировка HashMap значениями

Мне нужно отсортировать мой HashMap в соответствии со значениями, хранящимися в нем. HashMap содержит имя контактов, сохраненное в телефоне.

Также мне нужно, чтобы ключи автоматически сортировались, как только я сортировал значения, или вы можете сказать, что ключи и значения связаны вместе, поэтому любые изменения в значениях должны отражаться в ключах.

ОТВЕТЫ

Ответ 1

Предполагая Java, вы можете отсортировать hashmap так:

Просто отправьте пример. Этот способ более полезен, так как он сортирует HashMap и сохраняет повторяющиеся значения.

Ответ 2

Попробуйте под кодом, это отлично работает для меня. Вы можете выбрать как по возрастанию, так и по убыванию

Ответ 3

Ответ 4

В основном нет. A HashMap принципиально неупорядочен. Любые шаблоны, которые вы можете видеть в заказе, не следует полагаться.

В качестве альтернативы вы можете сохранить две отдельные коллекции, инкапсулированные в один класс, чтобы обновлять оба одновременно?

Ответ 5

Ответ 6

Ответ 7

В качестве своего рода простого решения вы можете использовать Temp TreeMap, если вам нужен только конечный результат:

Это приведет к тому, что строки будут отсортированы как ключи sortedMap.

Ответ 8

Я расширяю методы TreeMap и переопределяет методы entrySet() и values ​​(). Ключ и значение должны быть сопоставимыми.

Ответ 9

нашел решение, но не уверен в производительности, если карта имеет большой размер, полезный для обычного случая.

Источник

How to Sort a HashMap by Value in Java

Как отсортировать hashmap по значению

In this tutorial, we’ll take a look at how to sort a HashMap by value in Java.

Let’s go ahead and create a simple HashMap :

We’ve got String s as keys, and Integer s as values. And we’d like to sort this map based on the values.

HashMap s don’t guarantee to maintain the order of its elements in any case. The order can change through time, and they most definitely won’t be printed back in the order of insertion:

Note: TreeMap extends the SortedMap interface, unlike the HashMap implementation. TreeMap s are meant to be the sorted counterpart, however, TreeMap s only sort by keys, given a comparator.

Sort HashMap by Value with LinkedHashMap

LinkedHashMap preserves the order of insertion. It keeps a doubly-linked list of all entries, allowing you to very naturally access and iterate over its elements.

So, the easiest way to convert an unsorted HashMap into a LinkedHashMap is to add the elements in the order we’d like them to be in.

Sort HashMap in Ascending Order

To sort the unsortedMap we’ve seen earlier, we’ll create a new LinkedHashMap to house the elements in the order we want them to be in.

Let’s start off with sorting a HashMap in ascending order:

What we’ve done here is streamed the unsortedMap ‘s set of Map.Entry objects. Then, using the sorted() method, we can use various Comparator s to specify how the entries are compared.

Since we’re dealing with simple integers, we can easily use Comparator.comparingInt() method, and pass in a Lambda Expression. Through this expression, we supply the sort key from type T (in our case, Integer ).This method then returns a Comparator that compares that sort key.

Finally, a new LinkedHashMap is instantiated, into which all of these elements, in sorted order, are inserted.

Running this code results in:

However, with this approach, you can’t specify your own logic for the comparisons. Comparable values, like Integers, are sorted with the under-the-hood implementation. You could specify a custom object and specify your own comparison logic in that class, though.

In a very similar vein to this, you can also simply use the Map.Entry::getValue as well:

This one is functionally the exact same as the previous one, as Map.Entry.comparingByValue() uses the getValue() method to compare entries anyway.

Sort HashMap in Descending Order

Free eBook: Git Essentials

Check out our hands-on, practical guide to learning Git, with best-practices, industry-accepted standards, and included cheat sheet. Stop Googling Git commands and actually learn it!

Conclusion

In this tutorial, we’ve gone over how to sort a Java HashMap by Value. We’ve used Java 8 Streams with the LinkedHashMap class to achieve this functionality, both to sort by ascending and descending values.

Источник

Как отсортировать HashMap в Java

ОТВЕТЫ

Ответ 1

Вам нужно использовать HashMap? Если вам нужен интерфейс карты, используйте TreeMap

Хорошо. Думаю, теперь я понял ваш вопрос, вы хотите сортировать, сравнивая значения в hashMap. Вы должны написать код, чтобы сделать это, если вы хотите сделать это, как только вы можете отсортировать значения вашего hashMap:

Если вы хотите получить доступ к этому отсортированному списку часто, то вы должны вставить свои элементы в hashMap AND в отсортированный Set (например, TreeSet).

Ответ 2

Отсортированный список с помощью клавиш hasmap:

Сортированный список по значениям hashmap:

Ответ 3

В любом случае вы не можете отсортировать значения в 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 ).

Ответ 4

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

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

Ответ 5

Пользовательская функция сравнения, которая включает функциональные возможности для турецкого алфавита или других языков, чем английский.

вот пример использования в качестве следующего

Ответ 6

Ответ 7

Ответ 8

Если вы хотите объединить карту для эффективного извлечения с помощью SortedMap, вы можете использовать ConcurrentSkipListMap.

Конечно, для сортировки вам нужен ключ.

Ответ 9

рассмотрели ли вы использование LinkedHashMap ().

приводит к организованному связанному объекту.

проверьте отсортированную часть, выбранную из здесь.

Ответ 10

Ответ 11

Сортировка HashMap по значению:

Как указывали другие. HashMaps предназначены для простого поиска, если вы измените это или попытаетесь отсортировать внутри самой карты, у вас больше не будет поиска O (1).

Код для сортировки выглядит следующим образом:

Ответ 12

Я разработал полностью протестированное рабочее решение. Надеюсь, что это поможет.

Ответ 13

Я разработал класс, который можно использовать для сортировки карты на основе ключей и значений. Основная идея заключается в том, что если у вас есть сортировка карты с помощью ключей, тогда создайте TreepMap с вашей Карты, которая сортирует карту по ключам. А в случае сортировки по значениям создайте список из entrySet и отсортируйте список с помощью интерфейса компаратора.

Источник

Ответы на самые популярные вопросы об интерфейсе Map

0. Как перебрать все значения Map

1. Как конвертировать Map в List

2. Как отсортировать ключи мапы

Поместить Map.Entry в список и отсортировать его, используя Comparator.

В компараторе будем сравнивать исключительно ключи пар:

Если разобрался с лямбдами, эту запись можно существенно сократить:

И, конечно, все можно переписать, используя лямбды:

В отличие от первого способа, используя SortedMap, мы всегда будем хранить данные в отсортированном виде.

3. Как отсортировать значения мапы

4. В чем разница между HashMap, TreeMap, и Hashtable

Порядок элементов. HashMap и Hashtable не гарантируют, что элементы будут храниться в порядке добавления. Кроме того, они не гарантируют, что порядок элементов не будет меняться со временем. В свою очередь, TreeMap гарантирует хранение элементов в порядке добавления или же в соответствии с заданным компаратором.

Допустимые значения. HashMap позволяет иметь ключ и значение null, HashTable — нет. TreeMap может использовать значения null только если это позволяет компаратор. Без использования компаратора (при хранении пар в порядке добавления) значение null не допускается.

Синхронизация. Только HashTable синхронизирована, остальные — нет. Если к мапе не будут обращаться разные потоки, рекомендуется использовать HashMap вместо HashTable.

И общее сравнение реализаций:

HashMapHashTableTreeMap
Упорядоченность элементовнетнетда
null в качестве значенияданетда/нет
Потокобезопасностьнетданет
Алгоритмическая сложность поиска элементовO(1)O(1)O(log n)
Структура данных под капотомхэш-таблицахэш-таблицакрасно-чёрное дерево

5. Как создать двунаправленную мапу

6. Как создать пустую Map

Обычная инициализация объекта:

Создание неизменяемой (immutable) пустой мапы:

Источник

Русские Блоги

Как отсортировать HashMap по значению

Как отсортировать HashMap по значению

Краткое введение связанных компонентов

HashMap

Comparator

Если нам нужно контролировать порядок определенного класса, а сам класс не поддерживает сортировку, мы можем создать компаратор классов для выполнения сортировки.Реализация очень проста, и нужно только реализовать интерфейс java.util.Comparator.

Collections.sort метод

Collections.sort(List list,new Comparator() <
@override
public int compare( o1, o2) <
return 0;
>
>);
означает, что для сортировки входящего списка метод сортировки необходимо переписать в интерфейсе компаратора, отсортировав по возвращаемому значению, меньше 0 в порядке убывания, больше 0 в порядке возрастания
, обычно результат получается путем сравнения атрибута двух объектов o1 и o2.

Введение в принцип реализации

Поскольку HashMap не принадлежит к подклассу списка, метод Collections.sort не может использоваться для сортировки, поэтому мы берем набор записей в хэш-карте и помещаем его в ArrayList, чтобы отсортировать набор записей в ArrayList (в соответствии со значением набора записей), Чтобы добиться эффекта сортировки значения хэш-карты.

Код реализации

Список должен просматриваться при обходе, потому что сортировка, сделанная с помощью Collections.sort, предназначена для входящего списка. Если вы просмотрите хэш-карту, вы обнаружите, что она все еще не отсортирована.

Если что не так, поправьте меня, пожалуйста

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *