将重复的key放入HashMap时会发生什么?| Java Debug 笔记

301 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

问题:将重复的key放入HashMap时会发生什么?

如果我多次将相同的key传递给HashMap的put方法,原始值会发生什么变化?如果这个值重复呢?我没找到任何相关文档。

Case 1: 重写key对应的value

Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
System.out.println(mymap.get("1"));

输出surely not one.

Case 2: 重复的value

Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
// The following line was added:
mymap.put("1","one");
System.out.println(mymap.get("1"));

输出 one.

但是其他值呢?我给一个学生教基础知识,有人问我这个问题。Map是否像bucket一样只引用了最后一个值?

回答一

根据定义,put命令替换map中与给定key关联的前一个value(概念上类似于基本类型的数组下标操作)。

map只是删除对值的引用。如果没有其他对象持有对该对象的引用,那么该对象就有可能进行垃圾收集。此外,Java返回与给定key关联的任何先前value(如果没有,则返回null),因此您可以确定那里有什么,并在必要时维护引用。

回答二

键的先前值将被删除并替换为新的值。

如果你想保留键所给出的所有值,你可以考虑实现这样的东西:

import org.apache.commons.collections.MultiHashMap;
import java.util.Set;
import java.util.Map;
import java.util.Iterator;
import java.util.List;
public class MultiMapExample {

   public static void main(String[] args) {
      MultiHashMap mp=new MultiHashMap();
      mp.put("a", 10);
      mp.put("a", 11);
      mp.put("a", 12);
      mp.put("b", 13);
      mp.put("c", 14);
      mp.put("e", 15);
      List list = null;

      Set set = mp.entrySet();
      Iterator i = set.iterator();
      while(i.hasNext()) {
         Map.Entry me = (Map.Entry)i.next();
         list=(List)mp.get(me.getKey());

         for(int j=0;j<list.size();j++)
         {
          System.out.println(me.getKey()+": value :"+list.get(j));
         }
      }
   }
}

文章翻译自Stack Overflow:stackoverflow.com/questions/1…