HashMap作为常用的一种数据结构,阅读源码去了解其底层的实现是十分有必要的.在这里也分享自己阅读源码遇到的困难以及自己的思考. HashMap的源码介绍已经有许许多多的博客,这里只记录了一些我看源码过程中的疑问,一些基础知识不再讲解. 一:Hash值的来源和使用 public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } static final int hash(Object key
Sun JDK中采用javac将Java源码编译为class文件,这个过程包含三个步骤: 1.分析和输入到符号表(Parse and Enter) Parse过程所做的工作有词法和语法分析.词法分析要完成将代码字符串转变为Token序列.语法分析则是根据语法将Token序列生成抽象语法树. Enter过程将符号输入到符号表,通常包括确定类的超类型和接口.根据需要添加默认构造器.将类中出现的符号输入类自身的符号表中等. 2.注解处理(Annotation Processing)
[基本结构] 在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的: JDK 1.8 之后新增了红黑树的组成结构,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构,它的组成结构如下图所示: 数组中的元素我们称之为哈希桶,它的定义如下: static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next