Java的HashMap中put()方法返回值的问题

写了个测试类,测试向HashMap中put重复的key返回值是否会返回源码中所说的oldvalue
代码如下:
public class Test
{

public static void main(String[] args)
{
HashMap<String,String> map = new HashMap<String,String>();
String[] test = new String[30];

for (int i = 0; i < test.length; i++)
{
test[i]=String.valueOf(i);
}

for(int i = 0; i < 30;i++)
{
String str = map.put(String.valueOf(i%4),test[i]);

System.out.println(str);
}

}
}
结果如下:
null
null
null
null
0
1
2
...
24
25
以上测试代码说明如何put相同的key该方法会返回这个key原先指向的value,那是不是这样子原先的value就被覆盖掉了?还是保存在某个entry中?我对hashmap的底层还不是特别理解,盼高手指教!

put重复的key时,会用新的value替换旧的value,相当于修改 ;
比如
HashMap hm = new HashMap();
hm.put("KK","AA");
hm.put("KK","BB");
hm.get("KK")得到的值是“BB”,且hm中也只有一个entry而已追问

那是不是相当于hashmap是一个entry对象的数组?那源代码中entry对象的next成员变量是什么意思?

追答

HashMap也可以说相当于一个Entry的数组,不过储存方式不同,如果想滚动读取的话,需要用Iterator来读取, Iterator.next() 是指向下一个Entry的引用
HashMap hm = new HashMap();
hm.put("01", "AA");
hm.put("02", "BB");
Iterator> it = hm.entrySet().iterator();
while(it.hasNext()){
Map.Entry en = (Map.Entry)it.next();
System.out.println("key->" + en.getKey() + "; value is : " + en.getValue());
}

追问

我大致的理解是这样。。。就是说HashMap是一个给每个entry加上了index的LinkedList。。。不知道这样的理解是不是可以?

追答

不是这样的,可以参考这篇文章
http://alex09.javaeye.com/blog/539545

温馨提示:答案为网友推荐,仅供参考
相似回答