IT学习站-137zw.com

more +资源更新Forums

more +随机图赏Gallery

Zabbix 4.0 企业级自动化监控系统实战,完整版Zabbix 4.0 企业级自动化监控系统实战,完整版
Java程序员面试笔试真题与解析 完整pdf扫描版Java程序员面试笔试真题与解析 完整pdf扫描版
价值348元 RabbitMQ消息中间件技术精讲2018视频教程 百度云价值348元 RabbitMQ消息中间件技术精讲2018视频教程 百度云
10节课让你成为滚床单高手  强烈推荐 屌丝的福音10节课让你成为滚床单高手 强烈推荐 屌丝的福音
Spring Boot编程思想(核心篇) PDF 电子书 百度云 网盘下载Spring Boot编程思想(核心篇) PDF 电子书 百度云 网盘下载
最新流出的传智博学谷黑马python5.0课程最新流出的传智博学谷黑马python5.0课程

Map.Entry 接口

Map.Entry 接口

[复制链接]
却写杂布计 | 显示全部楼层 发表于: 2019-11-14 13:45:02
却写杂布计 发表于: 2019-11-14 13:45:02 | 显示全部楼层 |阅读模式
查看: 80|回复: 0

你还没有注册,无法下载本站所有资源,请立即注册!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Map.Entry

Map 接口下面的 Entry 接口。
该接口,定义一个键值对实体接口。Map.entrySet 方法返回的 Set 集合中的实体就是实现这个 它。只有一种方法可以获得 Map.Entry 对象的引用,那就是通过集合的迭代器。并且 Map.entry 只在迭代期间有效,更加准确的是意思是,如果在获得迭代器以后,修改了集合,那么 Map.Entry 的行为是未定义的1。除非调用 Map.Entry 的 setValue 设置下修改的值。
API文档中的这段话,说的让我有点费解。修改集合以后,Map.Entry 的行为是未定义的,LZ 做了实验,发现并没有触发到什么非法,未定义的操作。就如上面的代码所示,在得到 Entry 以后,对集合进行了修改,也没有触发什么非法的状态,抛出什么异常来。这里的未定义,其实是一个很无懈可击的答案,既然是未定义的,那么它们做出的任何行为,都是可以被理解的,所以它没抛出什么异常,那也是对的,抛出异常也是对的,你不应该单方面的任认为它应该怎样怎样,因为它是未定义,不同的实现有不同的反应
而且这里的合法与非法,是针对 Entry 的值来说,在你获取以后,有人又修改了集合的内容,这时候你获取的 Entry 的内容,也会随之改变,但是你可能不知道集合被修改过,所以这里的合法与非法,是 Entry 是否可以再被信任的问题,所以想要修改值的时候,应该用 entry 的 setValue() 方法,显示的去改。
K getKey()

返回实体对应的 key 。
可能抛出的异常 IllegalStateException ,这个异常可以 选择性 的实现。如果实现了,则异常的抛出条件:如果对应的 entry 已经被移除了,则抛出该异常。
比如,HashMap 的 Entry 就没有实现抛出该异常:而EnumMap 则实现了该异常,并且遵守了异常抛出条件:V getValue()

返回 entry 实体对应的 value 。
如果集合中此 entry 的映射关系已经被移除,即使是通过 iterator 的 remove 方法,getValue() 方法的返回值也是 未定义。因此,不同的实现,对此方法有不同的做法,HashMap 对其没做什么,正常返回值,即使映射关系被删除了。EnumMap 则抛出异常。
可能抛出的异常 IllegalStateException ,这个异常可以 选择性 的实现。如果实现了,则异常的抛出条件:如果对应的 entry 已经被移除了,则抛出该异常。
V setValue(V value)

替换当前 entry 的 value 为传进来的给定的 value ,(map 中对应的 value 也被改变)。如果集合中 entry 的映射关系已经被通过迭代器的 remove() 方法移除,则调用这个方法的行为是 未定义 的。看具体的实现如何操作。同样的 HashMap 对此行为,返回正确的值。EnumMap 则抛出异常。
返回设置值之前,当前 entry 对应的值。
可能抛出的异常:

  • UnsupportedOperationException :如果集合不支持 put 操作,则抛出此异常。
  • ClassCastException:如果传入的参数,不能转换存储到集合中,则抛出此异常,类型转换异常。
  • NullPointerException:如果集合不允许存入 null ,其传入的参数确实是 null ,则抛出此异常。
  • IllegalArgumentException:如果传入的值的某些属性,阻止其存入集合中,则抛出此异常。
  • IllegalStateException :此异常可选择是否实现。如果 entry 已经被移除了,则抛出此异常。
boolean equals(Object o)

将传入的参数对象与当前的 entry 比较,如果传入的对象也是一个 entry 类型,并且它们具有相同的映射关系,则返回 true 。
更确切的说,相同的映射关系,应该写成下面的代码: key ,value 分别相等。这样做以后,可以确保 equals 方法在不同的 Map.Entry 实现之前都能正确的工作。
int hashCode()

返回当前 entry 的哈希码。entry 的哈希码计算方法如下:这样做,确保 e1.equals(e2) 时,e1.hashCode()==e2.hashCode() ,当前前提是,这个两个 entry 的 KV 的 hashCode 方法一致 。
下面几个方法是 1.8 添加进来的。属于静态方法
comparingByKey()

[code]public static
137zw.com IT学习站致力于免费提供精品的java技术教程和python技术教程,CCNA书籍/资料/CCNP书籍/资料教程/CCIE书籍/资料/H3C学习/认证/一级建造师考试/微软学习/认证/包括基础教程和高级实战教程,同时也提供分享网站源码下载和互联网相关一系列的技术教程,我们想做的就是让知识分享更有价值!(IT学习站官方唯一域名地址:www.137zw.com 请谨防假冒网站!)本站所有资源全部收集于互联网或网友自行分享,分享目的仅供大家学习与参考,如无意中侵犯您的合法权益,请联系本站管理员进行删除处理!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

浙ICP备19022368号-1|Archiver|手机版|IT学习站-137zw.com

GMT+8, 2020-7-11 00:31 , Processed in 0.200390 second(s), 33 queries .

快速回复 返回顶部 返回列表