HashMap重写(3) 实现get()方法,根据key对象获得对应的value对象
在上一篇的基础上HashMap重写(2)HashMap重写toString()方法,增加get()方法。
上代码:
/**
* get()方法
* @param key
* @return
*/
public Object get(Object key) {
//拿到对应的hash值
int hash = myHash(key.hashCode(), table.length);
Object value = null;
if (table[hash] != null) {
Node2 temp = table[hash];
while (temp != null) {
//如果相等,则说明找到了键值对,返回相应的value
if (temp.key.equals(key)) {
value = temp.value;
break;
} else {
temp = temp.next;
}
}
}
return value;
}
具体思路是:
- 先根据key值算出hash值,定位到Entry[ ]数组;
- 然后在链表上比较key对象,调用equal() 方法,返回true节点对象;
- 遍历链表,如果没有找到key就返回null,找到了就终止循环,返回对应的value值。
测试:
public static void main(String[] args) {
YanHashMap01 m = new YanHashMap01();
m.put(10, "aa");
m.put(20, "bb");
m.put(30, "cc");
//测试key值相同,覆盖value是否成功
m.put(20, "jiajia");
//测试hash值相同的情况下,形成链表是否成功
m.put(53, "gg");
m.put(69, "hh");
m.put(85, "kk");
System.out.println(m);
System.out.println(m.get(10));
System.out.println(m.get(20));
System.out.println(m.get(53));
System.out.println(m.get(69));
}
测试结果: