В Java: получить массив значений карты, отсортированных по ключам карты - PullRequest
2 голосов
/ 04 ноября 2010

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

Например, если карта выглядитэто:

  • <2, obj1>
  • <4, obj2>
  • <0, obj3>
  • <10, obj4>
  • <5, obj5>
  • <1, obj6>
  • <15, obj7>
  • <3, obj8>

Я хочу, чтобы массив был: [obj3, obj6, obj1, obj8, obj2, obj5, obj4, obj7]

Чем быстрее, тем лучше.Есть ли встроенный способ сделать это?

Ответы [ 2 ]

3 голосов
/ 04 ноября 2010

Звучит так, будто вы хотите SortedMap, в частности, TreeMap.Вы можете использовать тот факт, что карта поддерживает отсортированный список ключей для генерации выходного массива, например, с помощью SortedMap.values() или путем перебора записей на карте.

1 голос
/ 04 ноября 2010

Мне всегда нравится, когда я могу ответить в форме прохождения юнит-теста:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

public class SortedMapValuesTest extends TestCase {
    public void testSortedMapValues() throws Exception {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        map.put(1, 200);
        map.put(2, 300);
        map.put(3, 100);
        List<Integer> list = getSortedMapValues(map);
        assertEquals("[200, 300, 100]", list.toString());
    }

    private <K extends Comparable<K>, V> List<V> getSortedMapValues(Map<K, V> map) {
        ArrayList<K> keys = new ArrayList<K>(map.keySet());
        ArrayList<V> values = new ArrayList<V>(keys.size());
        Collections.sort(keys);
        for (K key : keys)
            values.add(map.get(key));
        return values;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...