当前位置: 首页 > 知识库问答 >
问题:

HashMap值在所有键中被替换

钱志
2023-03-14

我通过一个接一个地放置值来创建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\u name=[Test1]}

逐个限制:-{profile\u name=[url],url=[url}

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

一一限制:-{profile_name=[证书], action=[证书],authentication_type=[证书], url=[证书]}

逐个限制:-{profile\u name=[ranjith],authentication\u type=[ranjith],username=[ranjith],action=[ranjith],url=[ranjith]}

共有2个答案

拓拔麒
2023-03-14
list.clear();
list.add(0,jObj.get(jArr.getString(k)));

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

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

濮升
2023-03-14

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

尝试将列表对象(列表变量)的声明移动到循环中,而不是调用。清楚的

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

 类似资料:
  • 今天好,这有点让我迷惑(大脑冻结!)好像少了些什么。有一个我用HashMap填充的ArrayList。现在我放入了我的HashMap和ArrayList。 由于am解析JSON,arraylist的大小显著增加。现在我的问题是如何从ArrayList中的两个映射键中获得值?我试过这个 但我似乎不能得到所有的值。映射大小总是返回值2,这只是元素。如何从ArrayList中的映射键获取所有值?谢谢

  • 因此,我有一个hashmap ,它存储每个字符串的arraylist。但是当我用ArrayList的新值添加另一对时,其他键值将被替换。因此,不同键的所有值都是相同的。 添加的第一个键: 对于第二个键,列表中有不同。但是,当添加第二个键(在put()方法之后)时,第一个键的值已经被替换。

  • 关于下面的代码,我有两个问题, 1.我在哈希图中有两次键“二”,打印时,“二”只显示一次。为什么它没有显示“二”两次? 2.如何选择性地显示键“二”?

  • 我需要一些帮助来替换HashMap中的值。HashMap包含每个键的多个值,这些值是从ArrayList中添加的。我想做的是替换键中的一个元素。例如,用户输入键1和索引2,这将是该键的值[1]=[A, B, C, D],索引2将是字母“C”,我想用“X”替换它,这样输出将是[1]=[A, B, X, D],这将在一个同时循环中。 输出: 1 张 AB 光盘 2 张 AB 光盘 3 张 AB 光盘

  • 我正在研究一种利用JSON中的替换函数参数的方法。Stringify在JavaScript中为了更改单词大小写(toTop /toLowercase),问题是我的JSON不是直键:value,有些值也是键,它们本身也有值,所以我需要遍历所有键和值,检查值是否也是键,并确保我更改所有键和值的大小写(toTop或toDown)。我知道JSON. Stringify(对象,Replace erFunct

  • 问题内容: 这是一个简单的问题,我有一个简单的HashMap,我想将其反转键和值。 我想创建一个新的HashMap,在其中放置相反的内容。 问题答案: 它们都是独一无二的,是的 如果您确定自己的值是唯一的,则可以遍历旧地图的条目。 另外,您可以使用Guava提供的双向地图,并使用方法: 随着java-8的发布,您也可以通过以下方式进行操作: 最后,我将我的贡献添加到了质子包装库中,该库包含Stre