HashMaps и операции - PullRequest
       19

HashMaps и операции

2 голосов
/ 11 декабря 2011

У меня проблема с HashMap. Я хочу положить в карту:

key - 320, value - 0.1
key - 321, value - 0.7
key - 322, value - 0.5
key - 323, value - 0.6

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

key - 321, value - 0.7
key - 323, value - 0.6
key - 322, value - 0.5
key - 320, value - 0.1

и после этого я хочу отсортировать карту в порядке возрастания, но только значения:

key - 321, value - 0.1
key - 323, value - 0.5
key - 322, value - 0.6
key - 320, value - 0.7

Это возможно в hashmaps? Как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 11 декабря 2011

Нет.HashMap - это реализация интерфейса Map, которая не сохраняет порядок ключей.Он помещает ключи в соответствии с их хэш-кодом.

Но у вас есть более простое решение.Вы должны использовать TreeMap вместо этого.Этот класс принимает компаратор.Используйте его со своим собственным компаратором, и вам даже не придется ничего сортировать.Ключи будут возвращены в соответствии с компаратором.Для обратного порядка вы можете использовать другой TreeMap или просто сказать new ArrayList(t.keySet()), а затем обратный порядок в списке.

0 голосов
/ 11 декабря 2011

HashMap не поддерживает порядок, поэтому он не может быть отсортирован. Вы должны поместить ключ и значение в объект.

class Pair {
    int key;
    doulbe value;
}

поместите их в ArrayList и используйте Collections.sort () для их сортировки.

class Pair {
    int key;
    double value;

    public Pair(int key, double value) {
        this.key = key;
        this.value = value;
    }
}

class Desc implements Comparator<Pair> {
    @Override
    public int compare(Pair o1, Pair o2) {
        return (int) Math.signum(o1.value - o2.value);
    }
}

class Asc implements Comparator<Pair> {
    @Override
    public int compare(Pair o1, Pair o2) {
        return (int) Math.signum(o2.value - o1.value);
    }
}

public class Test {
    public static void dump(Collection<Pair> col) {
        for ( Pair p :col ) {
            System.out.println("key = " + p.key + " value = " + p.value );
        }
    }
    public static void main(String[] args) {
        ArrayList<Pair> p = new ArrayList<Pair>();
        for (int i = 320; i < 325; i++) {
            p.add(new Pair(i, (double) i / 1000));
        }
        Collections.sort(p, new Asc());
        dump(p);
        System.out.println("------------------------");
        Collections.sort(p, new Desc());
        dump(p);
    }

}
0 голосов
/ 11 декабря 2011

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

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