HashMap值将在所有键中被替换

时间:2016-08-01 18:43:36

标签: java hashmap

我通过逐个放置值来创建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 = [Test1]}

逐个限制: - {profile_name = [url],url = [url}

逐个限制: - {profile_name = [0],action = [0],url = [0]}

逐个限制: - {profile_name = [Certificate],action = [Certificate],authentication_type = [Certificate],url = [Certificate]}

逐个限制: - {profile_name = [ranjith],authentication_type = [ranjith],username = [ranjith],action = [ranjith],url = [ranjith]}

2 个答案:

答案 0 :(得分:3)

可能问题是你在循环中使用相同的List对象。

尝试将List对象(列表变量)的声明移到循环内,而不是调用.clear。

实际上,每次向所有键添加相同的对象,因为java通过引用传递对象。

答案 1 :(得分:3)

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

这不符合你的想法。 Java按值传递引用。此行清除已放入其他地方的列表。您编写它的方式, 只有一个列表,您已将所有这些键映射到。

相反,您必须每次都创建一个新列表。您不能重复使用相同的列表。