firemail

标题: Java源码分析 [打印本页]

作者: java    时间: 2019-1-21 17:38
标题: Java源码分析
HashMap(1.8)设计思想分析

HashMap 是什么 ?  至少用来存储数据的 key,value键值对
如果计算机想要存储数据 数据的一种存储方式 
数据结构:数组, 链表, 树形, 图形
惰性:数据,链表  对应 ArrayList  LinkedList
验证 java 类 真的对应数据结构
图解:数组,链表 整体的感受
java代码
class Node{
        data;
        Node next;
        Node previous;
}

HashMap数据结构
数组+链表 ->结合两者优点



对key进行hash,hash冲突后内部使用链表,链表数量过大时,把链表转成红黑树,数量降下来后,再转会链表

Node节点 随机性 落点

16
(1)整数
(2)0-15
key value Rendom.nextInt(15) 不靠谱
key.hashCode  32455 越界
整数%16

hash(key){
        int hash = key.hashCode
        hash%16
}

得到Node节点的位置 如果位置原来有值,则往下顺延
Node要到哪里去 自己要知道


2倍扩容  原来的要打散重新分配










欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3