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

珠江现代建设 杂志社网站宁波十大广告传媒公司

珠江现代建设 杂志社网站,宁波十大广告传媒公司,网站开发培训学校,网站有信心做的更好Map中存放数据的Key-Value实质上就是Node节点#xff0c;而 底层是hash数组和链表(或树)#xff0c;不容易遍历。 一、containsKey() 和 get()查找元素 这两个方法可以获得信息#xff0c;但是依旧不能轻松遍历。 containsKey()方法判断对应的key是否存在#xff1b; get()…         Map中存放数据的Key-Value实质上就是Node节点而 底层是hash数组和链表(或树)不容易遍历。 一、containsKey() 和 get()查找元素    这两个方法可以获得信息但是依旧不能轻松遍历。 containsKey()方法判断对应的key是否存在 get()方法得到对应key的键值对依旧不是遍历。 1、containsKey() 和 get() 源码 可见二者 都是通过getNode()方法获取对应的结果。 2、getNode()方法 tab 是 table(哈希表)    first 哈希表找的链表或红黑树对应的头结点    e 代表当前节点    k 代表当前的 key 第一个if将哈希表空的、长度不够的、对应位置没存数据的 都过滤掉 第二个if头结点就找到了 hash相等值相等 且 不空的 key或和当前节点 equals相等的节点直接返回 第三个if上一个if头结点不匹配没找到就用 next 找 第四个if是红黑树就用红黑树的方法找 第五个if不是红黑树就是链表则找next即可。 二、keySet()、values()、entrySet()遍历 上述 containsKey() 和 get()方法虽然获得了部分信息但不容易遍历。 为了方便遍历提供了以下几个方法 keySet()、values()、entrySet()用来方便遍历 可见三个方法都是新建一个对应的类的对象然后返回该对象。这三个类都是HashMap的内部类。 ①接下来介绍这三个类(KetSet、Values、EntrySet) 由下面源码可知这三个类中 KeySet和EntrySet继承了AbstractSet类 Values继承了AbstractCollection类 而类AbstractSet继承了AbstractCollection类AbstractCollection类又实现了Collection接口。 KeySet类 Values类: EntrySet类 ②介绍这三个类的父类AbstractSet类和 AbstractCollection类(同时解释如何遍历) 可见 AbstractSet类没有构造方法而其父类AbstractCollection类构造方法如下是一个空构造方法。 因此下面三个类的父类都没有属性和构造函数其本类也没有属性和构造函数所以这些类都没有属性都是 没有内容的空对象。 那为什么输出三个类都可以 sout输出 以及为什么可以通过下面三个类的对象 进行遍历 呢 a.可以输出 相当于三个类都继承了AbstractCollection类有两个是隔代继承而 AbstractCollection类重写了toString()方法。 toString()方法都是调用Iterator()方法然后进行遍历。 可是这是map不是数组理应没有 Iterator,因此肯定重写了 而在AbstractCollection类该方法为空 意味着子类重写了该方法( Iterator()方法 ) 以子类HashMap为例 由上面可知HashMap的内部类KetSet、Values、EntrySet三者都继承了AbstractCollection类因此子类中必定重写了该方法 三个类的源码在上面在此处截取片段 可见三个方法都实现了Iterator()的重写 都是new一个对应的类且对应的类都是HashMap的内部类 KeySet - KeyIterator Values - ValueIterator EntrySet - EntryIterator 由下图可知三个类都继承了HashIterator类 且其next()方法最后都是返回nextNode()的值 HashIterator类 由下面源码可知该类主要有两个方法nextNode()和remove()方法 nextNode()使得其正确指向下一个节点。 nextNode(): 可见由于加进来的顺序是通过hash进行确定的而遍历却是依次遍历table的每一个链表(树) 所以取出来的顺序和加入的顺序大概率不相同。 加入顺序 map中table set中顺序(即去除取出顺序) 因为其是按顺序依次遍历table的每一个链表(树)所以其取出顺序应与table表中顺序一致 由此解决了  KeySet、EntrySet和 Values三个类为何能正常输出 首先 KeySet、EntrySet和Values间接或直接 继承了AbstractCollection类 - AbstractCollection类重写了toString()方法 - toString()方法调用Iterator() -动态绑定到具体实现类即HashMap的内部类KeySet、Values、EntrySet -三个类的Iterator()方法返回对应的三个类的对象KeyIterator、ValueIterator、EntryIterator -调用三个类的next()方法其实是调用父类的nextNode()方法 -这三个类都继承自同一个类HashIterator类 -该类主要有两个方法nextNode()和remove()方法 b.可以遍历 可以遍历原因跟上面一样。
http://www.zqtcl.cn/news/978028/

相关文章:

  • 上传网站图片处理画册设计多少钱一页
  • 网站做标签页新公司网站建设都有哪些优势
  • 上门做指甲哪个网站百度搜索榜
  • 西安网站seo优化商城域名注册管理机构
  • 凡客网站目录优化服装网站建设论文
  • 自助网站搭建哈尔滨seo优化
  • 做网站和软件的团队网页设计与网页制作的实验报告
  • 广州网站建设很棒 乐云践新wordpress搬家 登录报错
  • 顺的网站建设案例如何上传网站
  • 网站管理和建设工作职责中国建设银行卖狗年纪念币官方网站
  • 如何快速开发一个网站干洗店投资多少钱可以营业了
  • 哪些分类网站WordPress商用收费吗
  • 南开网站建设优化seo福建凭祥建设工程有限公司网站
  • 建设工程消防设计备案凭证查询网站网站建设课程设计目的和内容
  • 网站开发要花多少钱wordpress网站邀请码
  • 社旗网站设计小程序制作用华网天下优惠
  • 建设产品网站代理注册企业邮箱
  • 购物网站建设费用珠海本地网站
  • 做电商网站前期做什么工作网站后台jsp怎么做分页
  • 百家利网站开发搜索引擎分哪三类
  • 安徽集团网站建设深圳最新通告今天
  • 公司网站主机流量30g每月够用吗攀枝花网站网站建设
  • 淘宝做图片的网站手机网站北京
  • 重庆网站首页排名公司网站公众号小程序开发公司
  • 河源网站制作1993seo福州室内设计公司排名
  • 哪里有做装修网站网站开发总出现出现404
  • 做a漫画在线观看网站策划营销型网站
  • 怎么 从头开始建设一个网站临沂高端网站建设
  • 网页设计制作网站素材传奇代理平台
  • 公司建站网站软文营销方案