У меня в 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}
Как мне отсортировать хэш-карту так, чтобы учитывались алфавит, за которым следуют числовые цифры?
Результирующая хеш-карта должна выглядеть так:
{A052 = 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}
Цените помощь!
Ответы:
Использовать отсортированный
TreeMap
:Map<String, Float> map = new TreeMap<>(yourMap);
Он автоматически поместит записи, отсортированные по ключам. Думаю
String
, в вашем случае подойдет естественный порядок.Обратите внимание, что
HashMap
из-за оптимизации поиска порядок не сохраняется.источник
Используйте 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());
Когда вы добавляете новые элементы, они автоматически сортируются.
В вашем случае может даже не потребоваться реализация компаратора, потому что может быть достаточно упорядочения строк. Но если вы хотите реализовать особые случаи, например, буквы нижнего регистра перед верхним регистром или обрабатывать числа определенным образом, используйте компаратор.
источник
TreeMap
- ваш лучший выбор для такой сортировки (естественная).TreeMap
естественно сортирует по ключам.HashMap
не сохраняет порядок вставки и не сортирует карту.LinkedHashMap
сохраняет порядок вставки, но не сортирует карту автоматически. ТолькоTreeMap
вMap
интерфейсе карта сортируется в соответствии с естественным порядком (сначала цифры, второй алфавит в верхнем регистре, затем алфавит в нижнем регистре).источник
Используйте TreeMap , хотя наличие карты, «похожей на эту», немного туманно - вы также можете просто отсортировать ключи на основе ваших критериев и перебирать карту, извлекая каждый объект.
источник
Просто используйте
TreeMap
. Он реализуетSortedMap
интерфейс и, таким образом, автоматически сортирует содержащиеся в нем ключи. Ваши ключи можно просто отсортировать в алфавитном порядке, чтобы получить желаемый результат, поэтому вам даже не нужно предоставлять компаратор.HashMaps никогда не сортируются. Единственное, что вы можете сделать с HashMap, - это получить все ключи и сохранить их в отсортированном наборе или в списке и отсортировать список.
источник
Используя 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); }
источник
Вы можете использовать,
TreeMap
который будет хранить значения в отсортированном виде.Map <String, String> map = new TreeMap <String, String>();
источник
Используйте TreeMap (конструктор):
Map<String, Float> sortedMap = new TreeMap<>(yourMap);
Используйте TreeMap (метод PutAll):
Map<String, Float> sortedMap = new TreeMap<>(); sortedMap.putAll(yourMap);
Реализация интерфейса карты:
источник
TreeMap автоматически отсортирует в порядке возрастания. Если вы хотите отсортировать по убыванию, используйте следующий код:
Скопируйте приведенный ниже код в свой класс и за пределы основного метода выполнения:
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");
источник