Хранить значения ключей отсортированного хешмапа в строке [] - PullRequest
0 голосов
/ 14 сентября 2011

Прошу прощения за публикацию этого неясного вопроса.Это мой первый раз, используя hashmap, и, следовательно, я был сбит с толку.Я попытался объяснить этот вопрос лучше: сохранить ключевые значения hashmap в строке []

У меня есть отсортированный hashmap на основе значений.Я хочу извлечь ключи из отсортированной карты и сохранить их в массиве String [].Порядок ключей (отсортированный по значениям) важен.Я использовал этот код для сортировки хеш-карты по значениям - http://www.xinotes.org/notes/note/306/

Чтобы извлечь массив ключей, я попытался

 String[] keys = (String[])( hm.keySet().toArray( new String[hm.size()] ) )

(здесь hm - хеш-карта)

Но этот метод не сработал.Строка ключей [] содержит ключи, но не в том порядке, в котором я хочу.


Обновление: я использовал connectedHashMap и смог сохранить отсортированные значения ключей в массиве. Здесь - ссылка на код.

Ответы [ 5 ]

2 голосов
/ 14 сентября 2011

На основании опечатки и вашего пояснения, что вы используете hashmap, порядок поиска ключей не будет соответствовать порядку вставки. Используйте LinkedHashMap для этого. При этом вы выполняете внешнюю сортировку, а затем вставляете отсортированные записи в карту.

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

0 голосов
/ 14 сентября 2011

Казалось бы, вы хотите, чтобы порядок ключей HashMap был таким же, как ваш отсортированный список ключей. Это просто невозможно . Ключи HashMap s определяются алгоритмами хэш-таблицы; например сложный процесс, который зависит от хеш-значений ключей и последовательности вставок и удалений.

Самое близкое, что вы получите, - это создать LinkedHashMap и заполнить его, вставив записи из старого HashMap в порядке отсортированных ключей. Если затем вы перебираете ключи LinkedHashMap, вы получите их обратно в том порядке, в котором они были вставлены. Но это тяжелое решение, и оно выходит из строя, если впоследствии вам нужно будет добавить больше записей на «отсортированную» карту. Может быть лучше просто использовать TreeMap.


Я не хочу вносить изменения в hashmap. Я просто хочу получить массив с ключами в порядке отсортированных значений.

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

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

0 голосов
/ 14 сентября 2011

Попробуйте это:

public static void main(String[] args) {
    Map<String, String> hm = new TreeMap<String, String>();
    hm.put("AAA", "typeAAA");
    hm.put("BBB", "typeBBB");
    hm.put("ABB", "TypeABB");
    String[] keys = hm.keySet().toArray(new String[0]);
    for (String key : keys) {
        System.out.println("key: " + key);
    }
}

Вывод будет:

key: AAA
key: ABB
key: BBB
0 голосов
/ 14 сентября 2011

У меня есть отсортированная хеш-карта на основе значений. Я отсортировал хэш-карту на основе значений

Нет, у вас нет. HashMap не сортируется вообще. Вы можете получить значения () как коллекцию, и вы можете отсортировать их любым способом, но он не сортирует сам HashMap.

Но этот метод не сработал. Он хранит ключи в случайном порядке.

Не определено делать что-то иначе, тем более что вы не отсортировали HashMap вообще.

Вам нужно уточнить, о чем вы здесь говорите. Если вы хотите отсортировать значения, сделайте выше. Если вы хотите отсортировать ключи, сделайте выше с keys() вместо values() '. Если вы хотите, чтобы сама карта сортировалась по ключам, используйте TreeMap. Если вы хотите, чтобы сама Карта сортировалась по значениям, вам не повезло.

0 голосов
/ 14 сентября 2011

HashMap использует key.hashValue () для сортировки значений.Вместо этого используйте TreeMap.

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