首页 > 其他分享 >hashmap深入理解

hashmap深入理解

时间:2023-03-01 14:34:39浏览次数:39  
标签:Map Set hashmap Collection 理解 键值 key 集合 深入

1. Map:地图
* 1. 概念:Map:就是用来装键值对集合的容器
* 2. 作用:
* 解决了需要成对出现的这种关系结构
* 键(key) : 本质就是一个数据
值(value) : 本质也是一个数据
键值对: 就是一对(和两个是有区别的),一般是有某种关系的一对数据
* 例如:
* 1、例如QQ的账号+密码:想象场景-需要使用一个集合搜集各位100人的QQ号码和密码;
2、银行账户和密码
3、游戏账号和密码
4、搜集各位的姓名+女朋友的姓名 (情侣关系)
5、坐标(x,y)
6、....

3. Map的继承体系 是一个独立的体系,跟Collection一毛关系都没有
Map 接口
|-- HashMap【重点】 :基于hashCode(),底层是Entry键值对的数组,数组中装装的是键值对,
会根据添加的key的hashCode值 模 当前数组的length(默认是16),
(掌握) 而得到数组的下标,进而保存键值对。如果key模length后,得到的下标是相等的,
就会发生hash碰撞(哈希冲突),这时候再继续判断key的equals方法,
如果equals判断为true,就会将原来的键值对覆盖,如果是false,
就会在该下标处的原来键值对后面形成 链表,如果链表长度达到8个,就形成 红黑树。
当删除键值对后剩余的数量小于等于6的时候,就重新将红黑树,退化为链表。
(jdk1.8)put添加/remove删除

key判断键是否重复和HashSet判断重复一样:1. hashCode 2.equals()


| HashMap底层是Entry(键值对)的数组,并且维护了链表和红黑树【1.8】

 

 



5.遍历Map的三种方式:(掌握)
1. Set<Map.Entry<K,V>> entrySet() 返回所有键值对的Set集合。

2. Set<K> keySet() 返回所有键的Set集合。

3. Collection<V> values() 返回所有值的Collection集合

步骤:
1. 根据需求调用上面某一个方法,得到(键值对Entry或者键key)Set或者Collection(value)集合
2. 遍历第一步中的Set或者Collection集合
1. foreach
2. 单向迭代器

遍历选择:
如果是既需要key也需要value,最好用entrySet,其他场景根据情况

Map使用选择:(掌握)
1、Map中,HashMap具有超高的访问速度,如果我们只是在Map 中插入、删除和定位元素,
而无关线程安全或者同步问题,HashMap 是最好的选择。
2、如果考虑线程安全或者写入速度的话,使用ConcurrentHashMap替代Hashtable,既能获取超高的访问速度,又能保证线程安全
3、如果想按怎么存的顺序怎么取,比如队列形式,排队,那么使用LinkedHashMap
4、如果需要让Map按照key进行升序或者降序排序,那就用TreeMap

标签:Map,Set,hashmap,Collection,理解,键值,key,集合,深入
From: https://www.cnblogs.com/lidongm/p/17168053.html

相关文章

  • 深入了解视觉语言模型
    人类学习本质上是多模态(multi-modal)的,因为联合利用多种感官有助于我们更好地理解和分析新信息。理所当然地,多模态学习的最新进展即是从这一人类学习过程的有效性中汲取......
  • 关于JavaScript编译原理以及作用域的深入探讨
    前言大家好,我是CoderBin。几乎所有编程语言最基本的功能之一,就是能够储存变量当中的值,并且能在之后对这个值进行访问或修改。事实上,正是这种储存和访问变量的值的能力将状......
  • 如何理解机器学习中的嵌入 (Embedding)
    嵌入(Embedding)是用向量表示一个物体,这里所说的物体可以是人,是实体,是虚拟物品,比如:一个单词、一条语句、一个序列、一件商品、一个动作、一本书、一部电影、一个人等等。......
  • IP+端口的深入理解
    为什么打开浏览器输入的网址前面都会加上一个https或者http呢? 因为这是为了方便!我们通过一个IP地址可以定位到一台服务器,但如何精确到服务器里的某项服务呢?这就需要加上......
  • Apache Drill 理解
    ApacheDrill理解一、RestApi二、遇到问题1.中文编码问题2.升级无法启动问题3.mysqlsql解析执行语法问题4.集群模式下jdbcdriver代替restapi问题三、案例......
  • 深入变量和闭包
    加var变量和不加var变量的区别加var的变量都会提升,不管代码执行与否,不加var的变量预编译阶段不会提升原型链和作用域链window.a//不会报错返回undefined......
  • 理解requestAnimationFrame和cancelAnimationFrame
    window.requestAnimationFrame()方法告诉浏览器您希望执行动画并请求浏览器在下一次重绘之前调用指定的函数来更新动画。该方法使用一个回调函数作为参数,这个回调函数会在......
  • 【深入浅出 Yarn 架构与实现】4-5 RM 行为探究 - 启动 ApplicationMaster
    本节开始,将对ResourceManager中一些常见行为进行分析探究,看某些具体关键的行为,在RM中是如何流转的。本节将深入源码探究「启动ApplicationMaster」的具体流程。一、......
  • z-index负值深入理解
    补充点小知识:CSS3与新时代的层叠上下文:css3之前,可能我们说会影响层叠上下文的也就position属性了,那CSS3时代的到来,对层叠上下文规则带来了新的影响,css3时代会影响层叠上下文......
  • 理解和感悟
    上一篇的那一道题——思路:(简单来说)1,将.txt中的内容读取出来(就是普通的文件读取)2,通过split函数将读取到的String数据分段3,通过for(Stringst:split){……}对数据进行循......