Как отсортировать 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
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.
И общее сравнение реализаций:
| HashMap | HashTable | TreeMap | |
|---|---|---|---|
| Упорядоченность элементов | нет | нет | да |
| 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, предназначена для входящего списка. Если вы просмотрите хэш-карту, вы обнаружите, что она все еще не отсортирована.
Если что не так, поправьте меня, пожалуйста
