获取hashmap的子列表

时间:2014-01-10 16:35:51

标签: java hashmap

假设我有hashmap,密钥为String,值也为String。我想为某个key元素范围提取地图sublist的子列表(与List values函数一样)。

怎么可以实现呢?

3 个答案:

答案 0 :(得分:3)

正如我在评论中所说,我不会选择HashMap,而是使用SortedMap代替(每个例子TreeMap),其中subMap方法:

subMap(K fromKey, K toKey)
  

返回此映射部分的视图,其键的范围为   fromKey,inclusive,to toKey,exclusive。


SortedMap<String, String> m = new TreeMap<>();
m.put("aaa","1");
m.put("bbb","2");
m.put("ccc","3");
m.put("ddd","4");
m.put("eee","5");

SortedMap<String, String> subM = m.subMap("a","d");
System.out.println(subM);

输出:

{aaa=1, bbb=2, ccc=3}

如果您只需要值列表,请使用values()方法。

答案 1 :(得分:2)

这是一个非常天真的例子。

假设您有HashMap,如下所示:

public Map<Integer, String> map = new HashMap<Integer, String>();

你说你要创建一个子列表,所以我假设你想要一个List<String>作为输出:

public List<String> getKeyRange(Integer start, Integer end) {
    List<String> list = new ArrayList<String>();

    for (int i = start; i < end; i++) {
        String value = map.get(i); //Forgot that string can be null in Java

        if (value != null)
            list.add(value);
    }

    return list;
}

答案 2 :(得分:-1)

<K, V> List<V> getAll(Map<K, V> map, Collection<K> keys)
{
    List<V> values = new ArrayList<V>(keys.size());
    for(K key : keys)
    {
        values.add(map.get(key));
    }
    return values;
}