Сортировать ключи Hashmap по убыванию числовых значений - PullRequest
4 голосов
/ 29 августа 2011

Как мне отсортировать HashMap ключи по их числовому значению? В настоящее время в естественном порядке это выглядит так:

1 10 13 2 26 29

Я хочу, чтобы это выглядело так:

29 26 13 10 2 1

Есть идеи?

Ответы [ 5 ]

10 голосов
/ 29 августа 2011

A HashMap невозможно отсортировать.Если вам нужны отсортированные ключи, взгляните на TreeMap.Для того, чтобы получить обратный порядок, который вы хотите, вы должны предоставить пользовательский Comparator:

class ReversedOrdering implements Comparator<Integer> {
    public int compare(Integer lhs, Integer rhs) {
        // compare reversed
        return rhs.compareTo(lhs);
    }
}

Редактировать Я просто наткнулся на Collections.reverseOrder(), который делает именно то, что вы хотите: он дает вам Comparator, который изменяет естественное упорядочение объектов, которые реализуют Comparable.Это избавляет вас от необходимости писать компаратор самостоятельно.

6 голосов
/ 26 ноября 2011

Вы можете использовать TreeMap , а затем вызвать убывающую карту () , которая в основном возвращает карту с обратным порядком клавиш

0 голосов
/ 17 декабря 2012

Попробуйте приведенный ниже код, он работает нормально и на основе флага заказа сортирует по возрастанию или по убыванию.

import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;

/**
 * @author Rais.Alam
 * @date Dec 12, 2012
 */
public class HelloWorld
{
    public static void main(String[] args)
    {
        final boolean order = true;
        try
        {

            Map<Integer, String> map = new TreeMap<Integer, String>(
                    new Comparator<Integer>()
                    {

                        @Override
                        public int compare(Integer first, Integer second)
                        {

                            if (order)
                            {

                                return second.compareTo(first);
                            }
                            else
                            {
                                return first.compareTo(second);

                            }
                        }
                    });

            map.put(2, "v");
            map.put(3, "h");
            map.put(4, "e");
            map.put(1, "a");

            System.out.println(map);

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}
0 голосов
/ 29 августа 2011

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

0 голосов
/ 29 августа 2011

HashMap ничего не сортирует.Вместо этого используйте TreeMap , если вы хотите сохранить ключи отсортированными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...