2016-10-07 42 views
2

我在Java中的新手(通過JavaScript來在Adobe的LiveCycle開發),並面臨着以下問題:它把錯誤的空值從字符串數組中的HashMap

我有幾個項目的String數組。我只想把值爲「a」的項放到HashMap中。但是,在HashMap中我不是3個「a」值,而是在那裏得到1個空值。這是爲什麼?

String[] s = {"a", "a", "b", "a"}; 

    Map m = new HashMap(); 

    for (int i = 0; i < s.length; i++) { 
     if (s[i].equals("a")) { 
      m.put(i, s[i]); 
     } 
    } 

    for (int i = 0; i < m.size(); i++) { 
     System.out.println(m.get(i)); 
    } 

    // Prints 
    //a 
    //a 
    //null 
+0

訪問你有一個'地圖< Integer,String>'其中key是數組中字符串的索引。你不應該從0迭代到地圖大小,而是在地圖的實際條目上進行迭代。使用'for(Integer key:map.keySet())' –

+0

您將這些項目與其對應的索引放在'Map'中,即您有一個'Map',其內容爲{0 = a,1 = a,3 =一}'。因此,如果您嘗試使用'm.get(...)'中的'2'來訪問地圖,那麼您會得到一個'null',因爲在地圖中找不到鍵'2'。在旁註中:您正在使用原始類型。你應該正確地綁定'Map​​'和'HashMap'的類型:Map m = new HashMap ();' – Turing85

+0

'm.get(i)'返回key 'i'。那裏你沒有像數組一樣的索引 – Jens

回答

1

你把物品與它們對應的指數陣列sMap,即你有內容{0=a, 1=a, 3=a}一個Map。因此,如果您嘗試使用密鑰2m.get(2))訪問地圖,則會得到一個null,因爲在m中找不到密鑰2

而不是使用for -loop在m的通過foreach-loop的規模,我建議在m迭代的keySet()

for (Object key : m.keySet()) { 
    System.out.println("key: " + key + ", value: " + m.get(key)); 
} 

在一個旁註:你正在使用raw types。您應該正確地綁定MapHashMap的類型(有關詳細信息,請參見Javadoc of Map):Map<Integer, String> m = new HashMap<Integer, String>();。對於正確綁定的類型,中的for -loop可以是intInteger類型。我建議輸入Integer以避免不必要的Auto(un)boxing

2

你把項目在地圖鍵013

您正在使用鑰匙012將它們取出。

用途:

for (Object o : m.keySet()) { 
     System.out.println(m.get(o)); 
    } 

或 - 更好:

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

    ... 

    for (Integer i : m.keySet()) { 
     System.out.println(i + " -> " + m.get(i)); 
    } 
1

您的代碼工作正常,但您訪問的方式不正確。

String[] s = {"a", "a", "b", "a"}; 
for (int i = 0; i < s.length; i++) { 
    if (s[i].equals("a")) { 
     m.put(i, s[i]); 
    } 
} 

這使得它像這樣

First iteration : m.put(0, "a"); 
Second iteration : m.put(1, "a"); 
Third iteration : "b" doest not equal "a" but still counts the index i up 
Fourth iteration: m.put(3, "a"); 
從其他的答案

除了你仍然可以使用基於範圍的循環,並用Iterator

Iterator<String> it = m.values().iterator(); 
     while (it.hasNext()) { 
      System.out.println(it.next()); 
     } 
相關問題