接着上一章节。我们来讨论一下get方法。

1.还是利用上一章节的图

下图引用自:http://www.admin10000.com/document/3322.html

我们简单说一下步骤。就是通过hashcode先找到table上面的位置,然后遍历位置上的链表

2.get方法的源代码:

public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}

解释:

(1)当key为空的时候。使用特定的方法来get这个元素

getForNullKey的源代码:

 private V getForNullKey() {
for (Entry<K,V> e = table[0]; e != null; e = e.next) {
if (e.key == null)
return e.value;
}
return null;
}

从源代码上面看出,e=table[0],e是取table最開始的元素,再一次证明我们之前的结论,key为null的元素。是直接放在table的第一个位置。

(2)计算key 的hashcode,然后再使用hash方法。

(3)找到在table上面的位置

(4)遍历链表,找到对应的元素(除了对照hashcode,还须要通过equals方法的对照)

总结:这一章节介绍的相对简单,由于基本上get就是put的反操作。

这一章节就到这里,谢谢。

-----------------------------------

文件夹

最新文章

  1. Windows安装和使用zookeeper
  2. gulp/grunt和browserify/webpack的区别
  3. 纯html的table打印注意事项
  4. linux常用命令:1文件处理命令
  5. 织梦DedeCMS列表摘要 description 长度控制方法
  6. [转]C,C++开源项目中的100个Bugs
  7. VSS迁移
  8. Makefile中使用foreach生成一类规则
  9. perl 正则表达式之匹配
  10. Javascript控制台打印Object对象
  11. 前端基于easyui的mvc扩展
  12. Spring MVC静态资源处理(转)
  13. 一条命令,根据进程名判断有进程输出up,无进程无输出
  14. Vue之VueRouter
  15. java实验报告一
  16. Fiddler设置抓取FireFox火狐的包
  17. nodejs 不支持 typescript (...paramName:any[])剩余参数。变相支持方式。
  18. #define宏定义
  19. [javascript][转载]jQuery获取Select选择的Text和 Value
  20. spring mvc框架web.xml配置

热门文章

  1. C#——枚举格式转换与比较
  2. mysql_数据查询_单表查询
  3. HDU_1158_Employment Planning_dp
  4. Android之Fragment的优点和作用
  5. FTP服务器访问主动模式、被动模式
  6. 【JavaScript进阶】深入理解JavaScript中ES6的Promise的作用并实现一个自己的Promise
  7. C++编写谷歌日历
  8. THUSC2019 退役记
  9. mongodb数据库的导出与导入
  10. STM32学习笔记:读写内部Flash(介绍+附代码)