Сортировка хеш-карты по ключам - PullRequest
71 голосов
/ 22 октября 2011

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

Как мне следует сортировать хеш-карту так, чтобы следовал алфавитпо числовым показателям учитываются?

Полученная хеш-карта должна выглядеть так:

{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}

Оценитепомощь!

Ответы [ 8 ]

220 голосов
/ 22 октября 2011

Использовать отсортировано TreeMap:

Map<String, Float> map = new TreeMap<>(yourMap);

Он автоматически помещает записи, отсортированные по ключам. Я думаю, что естественный String порядок будет в вашем случае.

Обратите внимание, что HashMap из-за оптимизации поиска не сохраняет порядок.

23 голосов
/ 22 октября 2011

Используйте 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());

По мере добавления новых элементов они будут автоматически отсортированы.

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

10 голосов
/ 22 октября 2011

TreeMap - ваш лучший выбор для такой сортировки (натуральный).TreeMap естественно сортирует по ключам.

HashMap не сохраняет порядок вставки и не сортирует карту.LinkedHashMap сохраняет порядок вставки, но не сортирует карту автоматически.Только TreeMap в интерфейсе Map сортирует карту в естественном порядке (сначала цифры, второй алфавит в верхнем регистре, последний алфавит в нижнем регистре).

5 голосов
/ 22 октября 2011

Используйте TreeMap , хотя карта «выглядит так» немного туманна - вы также можете просто отсортировать ключи на основе ваших критериев и перебрать карту, извлекая каждый объект.

3 голосов
/ 07 августа 2017

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

Map <String, String> map = new TreeMap <String, String>();
3 голосов
/ 16 января 2016

Используя 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);
}
3 голосов
/ 22 октября 2011

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

HashMaps никогда не сортируются. Единственное, что вы можете сделать с HashMap - это получить все ключи, сохранить их в отсортированном наборе или в списке и отсортировать список.

0 голосов
/ 20 декабря 2018

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...