写了个测试类,测试向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的底层还不是特别理解,盼高手指教!
那是不是相当于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