当前位置: 首页 > news >正文

深圳有名的做公司网站/代运营竞价公司

深圳有名的做公司网站,代运营竞价公司,wordpress图片主,搜索最全的搜索引擎LinkedHashMap是HashMap的子类,上一节初步分析过HashMap,这一节分析LinkedHashMap。 LinkedHashMap的数据结构 Entry LinkedHashMap的Entry继承自HashMap的Node,除了Node的数据结构之外,增加了before、after,所以我们…

LinkedHashMap是HashMap的子类,上一节初步分析过HashMap,这一节分析LinkedHashMap。

LinkedHashMap的数据结构

Entry
LinkedHashMap的Entry继承自HashMap的Node,除了Node的数据结构之外,增加了before、after,所以我们可以猜测到LinkedHashMap的Entry应该是双向列表结构:

 static class Entry<K,V> extends HashMap.Node<K,V> {Entry<K,V> before, after;Entry(int hash, K key, V value, Node<K,V> next) {super(hash, key, value, next);}}

此外,LinkedHashMap定义了首节点和尾结点:

    transient LinkedHashMap.Entry<K,V> head;/*** The tail (youngest) of the doubly linked list.*/transient LinkedHashMap.Entry<K,V> tail;

table数组
继承自HashMap,没有变化!

数据依然保存在table数组中,不同的是table中的对象变成了Entry。

###LinkedHashMap的初始化
与HashMap的初始化方式、以及涉及到的容量、装载因子、扩容阈值等概念基本相同。

不过,增加了一个概念accessOrder,javadoc的解释是定义遍历访问顺序,当值为true时按照访问顺序排序,值为false则按照插入顺序排序。

    /*** The iteration ordering method for this linked hash map: <tt>true</tt>* for access-order, <tt>false</tt> for insertion-order.** @serial*/final boolean accessOrder;

LinkedHashMap赋值

LinkedHashMap的赋值逻辑如下(假设待存放的数据为e<key1,value1>):

  1. 检查table数组为空的话,初始化指定容量或者默认容量的table数组
  2. 根据key1的哈希值计算得出(算法为(容量 - 1) & hash(key1))对应的桶。这一步很重要,一般来讲优秀的hash算法能够尽可能确保不同的key值得到不同的hash值,也就可以确保放入不同的桶内。但是不可避免的,可能会存在不同key值得到相同hash值的情况(hash冲突:key1<>key2,hash(key1)=hash(key2)),这种情况下就会放置在相同的桶(比如table[5])内。
  3. 得到桶之后,判断桶内是否已经有数据。
  4. 没有数据则直接新建一个Node:newNode(hash, key1, value1, null),放在桶中,结束
  5. LinkedHashMap新建的Node是他的Entry对象,所以创建对象的过程与HashMap的略有不同:创建的是双向链表(通过before、after首尾相连),并在创建的过程中指定LinkedHashMap的head和tail。
  6. 否则,桶内有数据,有两种情况:一是为键值key1重复赋值、二是hash冲突。
  7. 如果是hash冲突,则new一个Node:newNode(hash, key1, value1, null)并将其设置为桶内的最后一个Node。
  8. 如果是重复赋值(桶内数据的key值=key1),则为key1重新赋值value1,并返回key1的旧值

与HashMap的赋值过程基本相同,不同之处在于:除了将数据分配在hash桶之外,同时按照存储数据的先后顺序创建双向链表。

从LinkedHashMap获取数据

LinkedHashMap通过key值获取数据的逻辑与HashMap的完全一致

通过get(key)方法获取数据的逻辑如下(假设要获取的数据key=key1):

  1. table数组不为空并且数组长度大于0,则采用与put数据相同的算法得到key1值对应的桶。
  2. 桶内不空则从第一个节点开始检查,如果节点key值等于key1,则返回该节点的value。如果第一个节点不满足条件,则依次检查桶内所有其他节点。
  3. 桶内空,或者桶内不空但是没有找到满足条件的对象(应该不可能)则返回null,表明当前HashMap中不存在key值为key1的对象

所以我们可以看到,正如名称给我们的启示一样,LinkedHashMap与HashMap的区别就是多了一个链表

我们知道LinkedHashMap能够确保按照存储顺序获取数据,而HashMap遍历到的数据是随机的,下次我们就具体分析一下其底层原因。

http://www.fp688.cn/news/252.html

相关文章:

  • 江门网站建设教程/口碑营销属于什么营销
  • 网站锚点怎么做/百度搜索关键词排名优化推广
  • 网站建设毕业设计怎么做/网站怎么做外链
  • 有什么有趣的网站/磁力吧ciliba
  • 国家住房城乡建设厅网站/网络优化软件
  • 用dreamweaver怎么做网站/淘宝关键词优化
  • 南昌网优化网站设计公司/营销策略是什么
  • 网站推广广告公司/太原网站seo
  • 淄博的大型网站建设/免费引流在线推广
  • 世界500强企业中国有多少家/成都网站搭建优化推广
  • 启航做网站好吗/宁波优化网站厂家
  • 如何进行电商网站设计/百度手机极速版
  • 微商做图王官方网站/成功的软文推广
  • 怎样做自己的个人网站/seo如何优化关键词排名
  • 如何把网站加入白名单/搜索引擎优化的定义是什么
  • 有什么好的免费网站做教育宣传/seo网络营销外包公司
  • 网站规划建设与管理维护教程与实训/百度怎么做推广和宣传
  • 网站建设方案 pdf/2020 惠州seo服务
  • 东莞网站设计服务/google官网下载
  • 邯郸专业做网站地方/产品推广计划方案
  • 济南市工程造价信息网/长沙搜索排名优化公司
  • 邯郸网站设计注册/班级优化大师官网
  • 茶企业网站/百度关键词搜索热度
  • 电子商务网站的设计/夸克搜索
  • 网站建设搭建微商导航网站/学网络营销有用吗
  • 做网站人家直接百度能搜到的/域名注册新网
  • 做服装招聘的网站/怎么样推广最有效最快速
  • 网站建设空间什么意思/谷歌seo搜索优化
  • 溧阳网站建设制作/网站建设制作免费
  • 做盗版网站的/推广普通话手抄报图片