2016-08-01 5 views
0

値を1つずつ入れて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 = [Test1を]}一つの制限によって

ワン - {PROFILE_NAME = [URL]、URL = [URL}

一つの制限によって

ワン - {PROFILE_NAME = [0]、アクション= [0]、URL = [0]}一つの制限によって

ワン - {PROFILE_NAME = [証明書]、アクション= [証明書] 、authentication_type = [証明書]、ur L = [証明書]}一つの制限によって

ワン - {PROFILE_NAME = [ランジット]、AUTHENTICATION_TYPE = [ランジット]、ユーザ名= [ランジット]、アクション= [ランジット]、URL = [ランジット]}

+0

これはどの言語ですか? Java?適切なタグを付けてください。 – duffymo

+0

'jArr'の定義を表示できますか?これは実装上のバグかもしれないようです。 – templatetypedef

+0

jArrはjsonArray、jArr: - ["profile_name"、 "url"、 "action"、 "authentication_type"、 "username"] –

答えて

3

おそらく問題は、ループ内で同じListオブジェクトを使用していることです。

リストオブジェクト(リスト変数)の宣言を.clearを呼び出す代わりにループ内に移動してみてください。

実際には、javaが参照によってオブジェクトを渡すので、毎回同じオブジェクトをすべてのキーに追加しました。

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

これはあなたが思う通りです。 Javaはの参照を値で渡します。この行は、既に他の場所に置かれているリストをクリアします。あなたがそれを書いたやり方では、であり、これらすべてのキーをマップしたリストは1つだけです。

代わりに、毎回の新しいリストを作成する必要があります。同じリストを再利用することはできません。

+0

ルイありがとうございます。私はclear()を認識しておらず、どこの値もクリアしています。 –

関連する問題