Сортировка хэш-карты на основе ключей
У меня есть следующий hashmap в java:
{B046 = 0,0, A061 = 3,0, A071 = 0,0, B085 = 0,0, B075 = 3,0, B076 = 9,0, B086 = 3,0, B095 = 0,0, B096 = 0,0, A052 = 0,0, B066 = 0,0, B056 = 9,0, B065 = 0,0, B055 = 9,0}
Как мне заняться сортировкой хэш-карты таким образом, чтобы учитывался алфавит, за которым следуют численные цифры?
Результат hashmap должен выглядеть следующим образом:
{А052 = 0,0, A061 = 3,0, A071 = 0,0, B046 = 0,0, B055 = 9,0, B056 = 9,0, B065 = 0,0, B066 = 0,0, B075 = 3,0, B076 = 9,0, B085 = 0,0, b086 = 3,0, B095 = 0,0, B096 = 0,0}
Цените помощь!
Ответы
Ответ 1
Использовать отсортированный TreeMap
:
Map<String, Float> map = new TreeMap<>(yourMap);
Он автоматически помещает записи, отсортированные по ключам. Я думаю, что естественный String
порядок будет хорошим в вашем случае.
Обратите внимание, что HashMap
из-за оптимизации поиска не сохраняет порядок.
Ответ 2
Используйте TreeMap с пользовательским компаратором.
class MyComparator implements Comparator<String>
{
public int compare(String o1,String o2)
{
// Your logic for comparing the key strings
}
}
TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());
По мере добавления новых элементов они будут автоматически отсортированы.
В вашем случае может даже не понадобиться реализовать компаратор, поскольку упорядочение строк может быть достаточным. Но если вы хотите реализовать особые случаи, например, буквы в нижнем регистре появляются перед верхним регистром или обрабатывать номера определенным образом, используйте компаратор.
Ответ 3
TreeMap
- ваш лучший выбор для такого рода сортировки (Natural). TreeMap
естественно сортируется в соответствии с ключами.
HashMap
не сохраняет порядок вставки и не сортирует карту. LinkedHashMap
хранит порядок вставки, но не сортирует карту автоматически. Только TreeMap
в интерфейсе Map
сортирует карту в соответствии с естественным порядком (сначала цифры, сначала буквы верхнего регистра, нижний регистр алфавита последний).
Ответ 4
Используйте TreeMap, хотя наличие карты "похоже" немного туманно - вы также можете просто отсортировать ключи основываясь на ваших критериях и перебираем по карте, извлекая каждый объект.
Ответ 5
Просто используйте TreeMap
. Он реализует интерфейс SortedMap
и, таким образом, автоматически сортирует содержащиеся в нем ключи. Ваши ключи можно просто отсортировать в алфавитном порядке, чтобы получить желаемый результат, поэтому вам даже не нужно предоставлять компаратор.
HashMaps никогда не сортируются. Единственное, что вы делаете с HashMap, это получить все ключи и сохранить их в отсортированном наборе или в списке и отсортировать список.
Ответ 6
Используя TreeMap, вы можете отсортировать карту.
Map<String, String> map = new HashMap<String, String>();
Map<String, String> treeMap = new TreeMap<String, String>(map);
//show hashmap after the sort
for (String str : treeMap.keySet()) {
System.out.println(str);
}
Ответ 7
Вы можете использовать TreeMap
, который сохранит значения в отсортированной форме.
Map <String, String> map = new TreeMap <String, String>();
Ответ 8
TreeMap будет автоматически сортировать в порядке возрастания. Если вы хотите отсортировать в порядке убывания, используйте следующий код:
Скопируйте приведенный ниже код в свой класс и за пределы основного метода execute:
static class DescOrder implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
}
Тогда по твоей логике
TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder());
map.put("A", "test1");
map.put("C", "test3");
map.put("E", "test5");
map.put("B", "test2");
map.put("D", "test4");
Ответ 9
Сортировка карты в Java с использованием Stream API
https://www.thedroidcompany.com/java/2019/01/26/sorting-a-map-using-stream-api.html