2009-11-19 146 views
-1
public interface InnerMap<V> extends Map<String, V> { 
    Map<String, V> getInnerMap(String prefix); 
} 

例如:我想創建一個哈希映射與內部映射和外部映射關係的哈希映射?

baseMap.put("aabb", "one"); 
baseMap.put("aabbddd", "two"); 
InnerMap map1 = baseMap.getInnerMap("aa"); 
map1.get("bb") => "one" 
map1.get("bbdd") => "two" 
map1.get("aa") => null 
map2 = map1.getInnerMap("bb"); 
map2.get("dd") => "two" 

,也希望覆蓋put和get方法

+0

你的問題是? – 2009-11-19 14:07:07

+0

這是什麼問題?你已經宣佈了你想要的,現在你在問什麼? – 2009-11-19 14:07:41

+0

有沒有理由不使用地圖>? – 2009-11-19 14:27:10

回答

2

這將是很難跟蹤所有可能的內部地圖。毫無疑問,如果您爲密鑰索引等,我的解決方案比我的解決方案更有效。但是,如果快速和骯髒的作品適合你,試試這個。你沒有提到一種語言,所以你得到Java - 希望我猜對了!

import java.util.HashMap; 
import java.util.Map.Entry; 

public class InnerMap extends HashMap<String, String> { 

    public InnerMap getInnerMap(String key) { 
     InnerMap innerMap = new InnerMap(); 
     for (Entry<String, String> entry : entrySet()) { 
      String existingKey = entry.getKey(); 
      String value = entry.getValue(); 
      if (existingKey.startsWith(key)) { 
       String newKey = existingKey.substring(key.length()); 
       innerMap.put(newKey, value); 
      } 
     } 
     return innerMap; 
    } 

} 

public class Test { 
    public static void main(String[] args) { 
     InnerMap baseMap = new InnerMap(); 
     baseMap.put("aabb", "one"); 
     baseMap.put("aabbdd", "two"); 
     InnerMap map1 = baseMap.getInnerMap("aa"); 
     System.out.println(map1.get("bb"));// => "one" 
     System.out.println(map1.get("bbdd"));// => "two" 
     System.out.println(map1.get("aa"));// => null 
     InnerMap map2 = map1.getInnerMap("bb"); 
     System.out.println(map2.get("dd"));// => "two" 
    } 
} 
+1

你必須是一個有遠見的人來回答這個問題。 「 – guerda 2009-11-19 14:19:26

+0

」一定是個有遠見的人......「我看到客戶的要求越來越差!但看看這個例子的標題和行爲,這看起來確實如此。 – vickirk 2009-11-19 15:20:25

+0

也許你可以用我的代碼作爲例子來開始吧? – monorailkitty 2009-11-20 12:12:28