2014-01-10 71 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()方法。