本文正在参加「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…