【问题标题】:HashMap values getting replaced in all keysHashMap 值在所有键中被替换
【发布时间】:2016-08-02 03:26:36
【问题描述】:

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

【问题讨论】:

  • 这是什么语言?爪哇?请适当标记。
  • 你能告诉我们jArr的定义吗?这看起来可能是实现中的错误。
  • jArr 是一个 jsonArray,jArr:- ["profile_name","url","action","authentication_type","username"]

标签: java hashmap


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    list.clear();
    list.add(0,jObj.get(jArr.getString(k)));
    

    这并不像你认为的那样。 Java 按值传递引用。 这一行清除了已经放在其他任何地方的列表。按照您的编写方式,只有一个列表您已将所有这些键映射到。

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

    【讨论】:

    • 谢谢路易斯。我不知道 clear(),它会清除各处的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2011-04-20
    • 2012-05-09
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多