2010-10-09 73 views
3

我想合併兩個哈希映射。合併兩個哈希映射Android

我可以使用map1.putAll(MAP2);但我不想重寫密鑰,因爲他們會有衝突的密鑰。

所以在每個地圖的鑰匙會是這樣

word1  word1 
word2  word2 
word3  word3 

,當我將它們合併,我想:

word1 
word2 
word3 
word4 
word5 
word6 

它可以只覆蓋鍵,aslong的關鍵是增量並使用第一個關鍵文本,即讀取其中一對並提取「單詞」,這樣每個單詞都將是word1 word2。

但另外一點我想在移動環境,我能做些什麼,而不必忍受加載屏幕,甚至可以勝任的。

所以作爲首發,我想:

HashMap<String, Object> hm1 = new HashMap<String, Object>(); 
    hm1.put("key1", "a"); 
    hm1.put("key2", "a"); 
    hm1.put("key3", "a"); 
    HashMap<String, Object> hm2 = new HashMap<String, Object>(); 
    hm2.put("key1", "1"); 
    hm2.put("key2", "2"); 
    hm2.put("key3", "3"); 

    HashMap<String, Object> newHM = new HashMap<String, Object>();  
    String keyWord = ""; 
    for (String s: hm1.keySet()) { 
     keyWord = s; 
     break; 
    } 
    int count = 0; 
    for (Object o : hm1.values()) { 
     newHM.put(keyWord+count, o); 
    } 
    for (Object o : hm2.values()) { 
     newHM.put(keyWord+count, o); 
    } 

但我想知道,如何高效這是什麼?它看起來是正確的,有沒有更好的方法來做到這一點?我不想不必要地使用額外對象

+1

字符串關鍵字= 「」; (String s:hm1.keySet()){ keyWord = s; 休息; } 這樣做有什麼意義呢?它總是會設置關鍵字來HM1 – 2010-10-09 20:10:12

+1

第一密鑰的理念是,要檢索已創建地圖的一個關鍵,我忘了,雖然從中取出數,所以每個按鍵會key11,KEY12,kat13。所以我應該用一個子串來解決這個問題。只要查看列表回答第一tho – Blundell 2010-10-09 21:26:39

回答

2

如果您的密鑰是增量式的,基本上代表一個簡單的索引,則應該使用List

你可以嘗試自己實現List這也將存儲的關鍵字。

class KeyWordedArrayList<T> extends ArrayList<T>{ 
    private final String keyword; 

    public KeyWordedArrayList(String keyword){ 
     this.keyword = keyword; 
    } 

    public String getKeyword(){ 
     return keyword; 
    } 
} 

你也可以做地圖的實現:

class KeyWordedMap<T> extends HashMap<Integer, T> { 
    private final String keyword; 

    public KeyWordedMap(String keyword) { 
     this.keyword = keyword; 
    } 

    public String getKeyword() { 
     return keyword; 
    } 

    @Override 
    public void putAll(Map<? extends Integer, ? extends T> m) { 
     for (Map.Entry<? extends Integer, ? extends T> entry : m.entrySet()) { 
      int i = entry.getKey(); 
      while (this.containsKey(i)) { 
       i++; 
      } 
      this.put(i, entry.getValue()); 
     } 
    } 
} 
+1

這是一個有效的點,但是在一些情況下,當我實例化這個hashmap對象的鍵不是增量的,所以我想哈希映射對象在這兩種情況下工作。 (我不會在這種情況下調用合併方法)。 我可以把它分成兩個獨立的對象,但我不認爲這應該是我的解決方案。 – Blundell 2010-10-09 21:43:02

+0

@Blundell,用Map實現更新。 – 2010-10-09 21:53:17

+0

很酷我得到了這個感謝 - 我想你認爲這是最佳答案呢?它採用了至少新對象等再次回答了這個問題,因此任何人在看我的Q能夠看到答案 – Blundell 2010-10-09 22:57:36

0

爲了配合我的例子那就是:

@Override 
public void putAll(Map<? extends String, ? extends Object> m) { 
    for (Map.Entry<? extends String, ? extends Object> entry : m.entrySet()) { 
     String keyWord = ""; 
     for (String s: this.keySet()) { 
      keyWord = s.substring(0, s.length()-1); 
      break; 
     } 
     int i = 0; 
     while (this.containsKey(i)) { 
      i++; 
     } 
     this.put(keyWord +i, entry.getValue()); 
    } 
}