我有一个hashmap,我希望在这个hashmap中得到一个值数组,但是我希望数组按hashmap中的键排序。
例如,如果地图如下所示:
我希望数组为:[obj3,obj6,obj1,obj8,obj2,obj5,obj4,obj7]
越快越好。是否有内置的方法来做到这一点?
答案 0 :(得分:3)
听起来像是SortedMap
,特别是TreeMap
。您可以使用以下事实:地图维护一个排序的键列表以生成输出数组,例如:使用SortedMap.values()
或迭代地图中的条目。
答案 1 :(得分:1)
我总是喜欢什么时候才能以通过单元测试的形式回答:
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;
}
}