2016-08-01 81 views
0

我通過逐個放置值來創建一個HashMap。當我在每次迭代後打印hashmap時,所得到的散列表包含所有鍵的相同值。我不明白爲什麼會發生這種情況。我粘貼了下面的輸出HashMap值在所有鍵中被替換

HashMap(String,List(Object))mRestrictions;

   for(int k = 0; k < jArr.length(); k++){ 

        Log.d(TAG,"inner Key:- "+jArr.getString(k)+" Values:- "+jObj.get(jArr.getString(k))); 

         list.clear(); 
         list.add(0,jObj.get(jArr.getString(k))); 
         //Log.d(TAG, "Existing List:- "+list); 

         mRestrictions.put(jArr.getString(k),list); 
         Log.d(TAG, "One by One Restrictions:- "+mRestrictions); 

       } 

輸出: -

逐個限制: - {PROFILE_NAME = [測試1]}

逐個限制: - {PROFILE_NAME = [URL],網址= [URL}

逐個限制: - {PROFILE_NAME = [0],動作= [0],URL = [0]}

逐個限制: - {PROFILE_NAME = [證書],動作= [證書] ,authentication_type = [證書],你的L = [證書]}

逐個限制: - {PROFILE_NAME = [蘭芝斯],authentication_type = [蘭芝斯],用戶名= [蘭芝斯],動作= [蘭芝斯],網址= [蘭芝斯]}

+0

這是什麼語言? Java的?請適當標記。 – duffymo

+0

你能告訴我們'jArr'的定義嗎?這看起來可能是實現中的一個錯誤。 – templatetypedef

+0

jArr是jsonArray,jArr: - [「profile_name」,「url」,「action」,「authentication_type」,「username」] –

回答

3

可能問題在於你在循環中使用了相同的List對象。

嘗試將List對象(列表變量)的聲明移至循環內部而不是調用.clear。

您實際上每次都將相同的對象添加到所有鍵,因爲java通過引用傳遞對象。

3
list.clear(); 
list.add(0,jObj.get(jArr.getString(k))); 

這不符合你的想法。 Java通過價值引用引用。該行清除已放入其他地方的列表。你寫的方式,只有一個列表,你已經將所有這些鍵映射到。

相反,您必須每次創建一個新列表。您不能重複使用相同的列表。

+0

謝謝Louis。我並不清楚clear(),它清除了各處的值。 –

相關問題