| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 简述哈希表 -> 正文阅读 |
|
[数据结构与算法]简述哈希表 |
目录 ????????????????哈希表的底层数组会在一下两种情况下扩容: ????????????????什么情况下链表转红黑树? 一 、什么是哈希表哈希表的英文叫 Hash Table,也可以称为散列表或者?Hash 表。哈希表用的是数组支持按照下标随机访问数据的特性,所以哈希表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。哈希表存储的是由键(key)和值(value)组成的数据。 二、哈希表的结构JDK1.8以前哈希表是由数组+链表组成 JDK1.8开始哈希表是由数组+链表+红黑树组成 加入红黑树的好处: 链表的特点是增删快,查询慢。所以链表越长就会导致查询越慢,而红黑树恰好解决这一问题。 数组类型:哈希表的数组类型是java.util包下的HashMap$Node类型的数组
数组长度: 未定义数组长度会创建一个初始化长度为16的数组 如果定义了数组长度则数组是最接近二的n次方。例:定义长度为100的数组实际长度为128=2的6次方。 三、哈希表的新增
判断是否重复的规则可以理解为 比较两个元素的的哈希值是否相同 && (地址值相同 || equals相同) true为重复,不新增;false为不重复,新增。 可以借助下图来理解 注意:equals()方法是object类的方法,比较的是地址值。如果要比较内容需要重写hashCode()方法和equals()方法。 四、哈希表的扩容哈希表的底层数组会在一下两种情况下扩容:
扩容后的新容量 = 旧容量 <<?1;扩容后的新容量就等于旧容量的二倍。可以借助下面的图来理解:
?如图所示,当数组长度为16,索引值0下面的元素超过8个,数组就会扩容,数组长度变为32,而索引值0会与索引值16平分索引值0下的元素。直到数组长度达到64,那么此时,索引值0会与索引值32平分,索引自16会与索引值48平分。 什么情况下链表转红黑树?当数组的长度大于64且同一索引值位置下元素超过8. 如图所示: ?
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/25 21:24:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |