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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Map+Set要点总结 -> 正文阅读

[数据结构与算法]Map+Set要点总结

1 HashMap问题总结

1.1 迭代map的两种方式:

  1. 通过entrySet() 得到返回类型Set< Map.Entry< K, V > >,引用设为set,然后通过iterator来迭代
  2. 通过keySet()得到所有的key,再组合map.get(Object K)返回对应的values值。也通过iterator迭代

通过map.toString()可以直接获得键-值集

1.2 为什么加载因子默认值是0.75?

加载因子也叫扩容因子,用于决定HashMap数组何时进行扩容。所谓的扩容指的是重新创建一个指定容量的数组,然后将旧值复制到新的数组里。扩容这个过程非常耗时,会影响程序性能。所以加载因子是基于容量和性能之间平衡的结果

  • 当加载因子过大时,扩容阈值也变大,也就是说扩容的门槛提高了,这样容量的占用就会降低。但这时哈希碰撞的几率就会增加,效率下降;
  • 当加载因子过小时,扩容阈值变小,扩容门槛降低,容量占用变大。这时候哈希碰撞的几率下降,效率提高。

容量占用和性能是此消彼长的关系,它们的平衡点由加载因子决定,0.75是一个即兼顾容量又兼顾性能的经验值(统计值)。

1.3 如何得到key的哈希值?

通过hash(Object key)方法,返回哈希值

如果key为null,返回0,不为null,则通过 (h = key.hashCode()) ^ (h >>> 16) 公式计算得到哈希值。该公式通过hashCode的高16位异或低16位得到哈希值,主要从性能、哈希碰撞角度考虑,减少系统开销,不会造成因为高位没有参与下标计算从而引起的碰撞。

1.4 如何得到插入元素在数组中的下标

通过公式(n - 1)& hash ,计算出插入元素在数组中的下标 。hash为key的哈希值。
以数组默认长度16为例,得到的下标值都小于16。

1.5 什么情况下会替换掉旧值?

Node<K,V> e; K k;
// 如果目标位置key已经存在,则直接覆盖
if (p.hash == hash &&
	((k = p.key) == key || (key != null && key.equals(k))))
	e = p;

由源码可以看出,

  • 条件一:新旧元素的hash值相同。(但此时key不一定相等,因为不同的key也可能有相同的hash值。这里使用了短路运算)
  • 条件二:新旧元素的key相等。(1."==“相等,即key是数字,并且新旧相等。2.”.equals"相等,即key是字符串,新旧相等)
  • 注:为链表结构时的判断方法也与这里替换数组下标元素的方法相同

1.6 链表转换为红黑树的条件?

  • 条件一:链表长度大于等于8
  • 条件二:数组长度大于等于64

2 hashmap和treemap的区别?

  • hashmap底层基于数组+链表+红黑树的实现,treemap底层基于红黑树
  • hashmap允许key和value为空 treemap中key不允许为空
  • treemap中key的类型必须 要一致

3 List和Set的区别?

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

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