| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 一篇文章让你精通:java集合讲解(六,Map源码了解) -> 正文阅读 |
|
[数据结构与算法]一篇文章让你精通:java集合讲解(六,Map源码了解) |
?HashMap1,jdk1.7及以前,hashmap以一个数组加链表实现的存储结构 ?2,每一个节点是一个Entry,其中包括:键(key),值(value),键的哈希码(hash),下一个节点的引用next(指向下一个Entry)四个部分。 ?3,如果你的key是null,添加数据放在索引为0的位置,查找也是从0的位置。 4,在调用put方法添加键值对时,哈希表三步添加键值对原理实现:是计算keyd的哈希码,与value无关 5,jdk1.7中put方法添加键值对时,当没有key哈希码不同时,添加在链表的第一个位置(头插法),key相同时,后面添加value覆盖前面添加value。(在jdk1.8后就是尾插法,添加在链表后面) 6,get方法根据key获取value,实际上根据key找到Entry,Entry找到value。 7,当我们添加元素到12(可以自己设置:数组长度(默认16)*填充因子(默认0.75f))数组扩容原来二倍(满足达到阈值,主数组没有新存储位置有节点) 8,jdk1.8后的变化:当链表存储数据>=8,不采用链表进行存储,采用红黑树进行存储(提高效率,增加查询速率) TreeMap?1,每一个节点是一个Entry,其中包括:key,value,左孩子,右孩子,根(默认是黑色) 2,添加原理(1,添加第一个元素默认为根,2,再次提交,就需要运用外部比较器与根进行比较(第一次比较都是比较根),如果外部比较器为null,就使用内部比较器进行比较。然后添加,当添加key相同,value进行覆盖,3,比较比根小,添加在左节点,比根大,添加在右节点(如果下面还有就继续向下比较)) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:42:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |