我通过逐个放置值来创建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]}
答案 0 :(得分:3)
可能问题是你在循环中使用相同的List对象。
尝试将List对象(列表变量)的声明移到循环内,而不是调用.clear。
实际上,每次向所有键添加相同的对象,因为java通过引用传递对象。
答案 1 :(得分:3)
list.clear();
list.add(0,jObj.get(jArr.getString(k)));
这不符合你的想法。 Java按值传递引用。此行清除已放入其他地方的列表。您编写它的方式, 只有一个列表,您已将所有这些键映射到。
相反,您必须每次都创建一个新列表。您不能重复使用相同的列表。