2014-01-10 75 views
1

可以说我有一个hashmap,密钥String,值也是String。我想为某个key元素范围提取地图的values的子列表(如Listsublist函数)。获取散列图的子列表

这怎么可能实现?

+0

这个元素范围的语义是什么? –

+0

对于'HashMap',一个键只能有一个值。 – rgettman

+0

@SotiriosDelimanolis HashMap的值与另一个列表中的值相同。 – user2051347

回答

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; 
} 
-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; 
} 
+0

我想你误解了这个问题。您可以直接调用'map.values()'来获取地图中的所有值。顺便说一句,不是downvoter。 –

+0

他并不想要所有的价值,只有一些。如果OP可以将他的“范围”定义为一个集合,这将会满足他的需要。 – MikeFHay

3

正如我在评论中说,我也不会去的HashMap,但对于一个SortedMap代替(一个TreeMap每例),其中有一个subMap方法:

subMap(K fromKey, K toKey) 

返回此映射,其键的范围从 fromKey(包括)到toKey,独占的所述部分的视图。


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()方法。