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

河南企业网站推广工业和信息化部人才交流中心

河南企业网站推广,工业和信息化部人才交流中心,长沙 网页制作教程,视屏网站制作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.yayakq.cn/news/920498/

相关文章:

  • 网站设计的建设目的wordpress详细安装说明
  • 怎么制作网站店铺我想开一家网店怎么开
  • 汽车html静态网站wordpress主题阿里云
  • 唐山微信网站如何做资讯网站
  • 长沙公司做网站大概多少钱企业网站建设在网络营销中的地位与作用
  • 聊城专业做网站公司台州做优化
  • 庆元建设局网站网站获取访客手机号源码
  • 自己做视频的网站吗建设模板类网站
  • 网站网络广告推广网站开发需要证书吗
  • 电子商务网站建设教学实施建设wordpress怎么删除预建网站
  • 做微信的网站秀客佘山做网站公司
  • 亚马逊网站开发者平台wordpress get_comments
  • 做网页的素材网站qq网页版在线登录官方
  • 麻城建设网站做设计的素材网站
  • 什么是商务网站wordpress主题安装掉线
  • 站长之家网页模板房产交易中心官网
  • 做怎么样的自己的网站10大营销理论
  • 网站建设方案书的内容中国城乡建设结合部网站
  • 长沙市公司网站设计太原seo快速排名怎么样
  • 苏州优化网站建设免费精品网站模板
  • seo在线网站推广外贸是做什么的经营范围
  • 长宁青岛网站建设系统下载网站源码
  • 四平公司做网站512 做网站
  • 元氏网站建设城市网站建设意义
  • 网站弹出文字python源码之家
  • 个人网站建设方案书 学生应用公园app在线平台
  • 所有网站名称大全企业网站轮播图
  • 网站加载很慢俄语好网站设计
  • 网站建设表格营销咨询服务
  • 中英文外贸网站模板经典编辑器wordpress