IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> HashMap有关面试题笔记 -> 正文阅读

[数据结构与算法]HashMap有关面试题笔记

1,jdk1.7 采用头插法;jdk1.8采用尾插法(jdk1.8需要判断链表的长度,循环到最后一个元素,索性就把新元素插到了尾部了;为什么判断链表长度?因为要转红黑树)

2,关于元素的插入位置index,index = hashcode & (length-1)

首先,&运算速度快;length一定是2的幂次方,与运算过后,一定是个0-length之间的一个数;index计算过程中,还有一些右移,异或运算啥的,都是为了让高位能参与运算。

3,put(key,value)方法,如果覆盖原先值的话,put方法的返回值为,被覆盖额值。

4,jdk1.7是先扩容再添加;jdk1.8是先添加再扩容。

5,jdk1.8源码中的resize()方法的作用是初始化hashmap和扩容;链表长度大于8,转红黑树,小于6,红黑树转链表;为什么不是小于8转链表?防止频繁转换,节省开销,提高效率。

6,特别注意:链表长度大于8时,链表不一定转换红黑树!看好是不一定,源码中显示,如果数组的元素个数小于64,优先进行扩容;64是默认值,可以看源码确认一下。

7,经常被问的一个问题,hashmap里能不能存key为null 的值,答案是可以的,只不过只能存一个。标准答案:HashMap 允许插入键为 null 的键值对。但是因为无法调用 null 的 hashCode() 方法,也就无法确定该键值对的桶下标,只能通过强制指定一个桶下标来存放。HashMap 使用第 0 个桶存放键为 null 的键值对

8,总结:链表上的数据哈希值不一定相同(大多数情况下不相同),key值肯定不相同,当有新元素时,如果用hashcode得出的index相同,循环比较key的值,如果有相同的key值,则覆盖原来的值;如果没有相同的key值,就在链表尾部添加该元素,链表长度加1。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 12:10:50  更:2021-09-01 12:11:55 
 
开发: 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 0:29:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码