2016-08-01 57 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(),它清除了各处的值。 –

相关问题