Подтвердить что ты не робот

Сортировка хэш-карты на основе ключей

У меня есть следующий 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}

Цените помощь!

4b9b3361

Ответ 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");