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

重庆品质网站建设销售传奇网页游戏排行

重庆品质网站建设销售,传奇网页游戏排行,wordpress树形目录,合肥网站维护公司本文介绍java.lang.Object类中的两个方法#xff1a;equals和hashCode。这两个方法大家应该都知道#xff0c;但是这两个方法的作用是什么、为什么重写equals还要重写hashCode、它们之间有什么关系和约定等#xff0c;今天就来带大家了解一下。 1、hashCode hashCode即散列…本文介绍java.lang.Object类中的两个方法equals和hashCode。这两个方法大家应该都知道但是这两个方法的作用是什么、为什么重写equals还要重写hashCode、它们之间有什么关系和约定等今天就来带大家了解一下。 1、hashCode hashCode即散列码。散列码是用一个int值来代表对象它是通过将该对象的某些信息进行转换而生成的。Object类中默认的hashCode方法如下 public native int hashCode(); 这是一个本地方法不同的虚拟机有不同的实现具体实现自己看虚拟机源码哈。Object默认的hashCode是根据对象的内存地址转化而来的它是唯一的 我们可以在自己的类中覆盖hashCode方法但我们可以使用System.identityHashCode(Object x)方法返回默认的hashcode无论对象是否覆盖默认的hashcode hashCode方法主要是为了给诸如HashMap这样的哈希表使用。 设计hashcode最重要的因素是对同一个对象调用hachCode()应该产生同样的值前提是对象的信息没有被改变设计一个hashCode它必须快而且具有意义使用有意义的字段来生成hashcode。hashCode不需要唯一(默认的hashCode唯一)因此更应该关注它的速度而不是唯一性。 由于在生成桶(桶指哈希桶或哈希表的槽位)的下标前hashcode还要做进一步处理所以生成的hashCode范围不是很重要是int就行。好的hashCode()应该产生分布均匀的散列码。 哈希桶的大小最好是2的n次方。 对现代处理器来说除数和求余是最慢的操作而使用2的n次方可以用位运算代替求余%开销较大。 举个例子假设哈希桶大小为16HashMap初始大小假设hashCode为20那么使用%求余会得到下标4但这可以用 hashCode(length-1) 代替即20(16-1)结果也是4 2、equals hashCode并不需要唯一性但equals必须严格地判断两个对象是否相同。 正确的equals方法有如下特性 自反性x.equals(x)一定返回true 对称性如果x.equals(y)为true那么y.equals(x)也为true 传递性如果x.equals(y)为true、y.equals(z)为true,那么x.equals(z)也为true 一致性如果x和y中用于等价比较的信息没有改变那么x.equals(y)无论调用多少次结果都一致 任何不是null的xx.equals(null)一定返回false 3、根据Object规范规范约定 如果两个对象通过equals方法比较是相等的那么它们的hashCode方法结果值也是相等的。如果两个对象通过equals方法比较是不相等的那么不要求它们的hashCode方法结果值是相等的。当在一个应用程序执行过程中 如果equals方法比较中没有修改任何信息那么在同一个对象上重复调用hashCode方法时它必须始终返回相同的值。但如果从一个应用程序到了另一个应用程序两个应用程序汇中调用hashCode方法的返回值可以是不一致的。 Object类中的默认的equals和hashCode方法 equals比较的是对象的内存地址是否相同相当于操作符hashCodehashCode方法的返回值符合上述规范 因此当只重写equals方法不重写hashCode时违反规定equals相等的对象必须具有相等的哈希码。 如果不这样做你的类违反了hashCode的通用约定对于HashSet, HashMap, HashTable等基于hash值的类就会出现问题。 以HashMap为例当集合要添加新的对象时先调用这个对象的hashCode方法得到对应的hashcode值实际上在HashMap的具体实现中会用一个table保存已经存进去的对象的hashcode值如果table中没有该hashcode值它就可以直接存进去不用再进行任何比较了;如果存在该hashcode值就调用它的equals方法与新元素进行比较相同的话就不存了不相同就散列其它的地址。 这样解决了向含有大量数据的集合中添加元素时大量频繁的操作equals方法的问题。 下面举个例子说明 创建一个Point类有两个成员变量x和y,并重写了equals方法。 public class Point {private final int x, y;public Point(int x, int y) {this.x x;this.y y;}Overridepublic boolean equals(Object obj) {if (this obj) return true;if (!(obj instanceof Point)) return false;Point point (Point) obj;return x point.x y point.y;}public static void main(String[] args) {Point p1 new Point(1, 2);Point p2 new Point(1, 2);System.out.println(p1.equals(p2));// trueMapPoint, String map new HashMap();map.put(p1, p1);System.out.println(map.get(p2)); // null} }你可能觉得 map.get(p2) 应该返回字符串 p1, 但是却返回null, 这是因为Point类并没有重写hashCode方法导致两个相等的实例p1和p2返回了不同的哈希码违反了hashCode的约定put方法把实例p1放到了一个哈希桶(hash bucket)中但因为p2的哈希码不等于p1的哈希码所以get方法会从其它哈希桶中去查找。 解决这个方法很简单只需要重写Point类的hashCode方法。 Overridepublic int hashCode() {int result Integer.hashCode(x);result 31 * result Integer.hashCode(y);return result;}public static void main(String[] args) {Point p1 new Point(1, 2);Point p2 new Point(1, 2);System.out.println(p1.equals(p2));// trueMapPoint, String map new HashMap();map.put(p1, p1);System.out.println(map.get(p2)); // p1}这次你会发现map.get(p2) 返回的就是字符串p1了, 因为hashCode这个方法会返回一个简单的确定性计算的结果它的唯一的输入是 Point实例中的两个重要的属性x和y所以显然相等的 Point实例具有相同的哈希码。 此外Objects 类有一个静态方法它接受任意数量的对象并为它们返回一个哈希码。这个名为 hash 的方法可以 让你编写一行 hashCode 方法其质量与根据这个项目中的上面编写的方法相当。 Overridepublic int hashCode() {return Objects.hash(x, y);}注意事项 当你写完 hashCode 方法后请一定问一下自己是否满足相等的实例有相同的哈希码这一条件。hashCode中涉及到的属性应与equals中保持一致不要试图从哈希码计算中排除重要的属性来提高性能。 总之每次重写 equals 方法时都必须重写 hashCode 方法否则程序将无法正常运行。你的 hashCode 方 法必须遵从 Object 类指定的常规约定并且必须执行合理的工作将不相等的哈希码分配给不相等的实例。
http://www.w-s-a.com/news/267298/

相关文章:

  • 福州企业网站建站模板国内黑色风格的网站
  • 好看的网站首页设计android移动开发
  • 域名注册完成后如何做网站域名 删除 wordpress
  • wordpress xml导入大小东莞seo优化方案
  • 网站建设效益网站销售怎么做的
  • 利用网站空间做代理设计方案的格式范文
  • 无锡建设工程质量监督网站遵义做手机网站建设
  • 衡阳商城网站制作ps做网站首页规范尺寸
  • 微信网站应用开发营销推广的方案
  • 广州做网站商城的公司制作一个app的完整流程
  • 湖南城乡建设厅网站163注册企业邮箱
  • 做网站怎么调整图片间距织梦做的网站如何去掉index
  • 凡科网免费建站步骤及视频网页设计基础教程第二版课后答案
  • 建设一个旅游网站毕业设计企业网站要更新文章吗
  • 做网站需要简介中山网站设计公司
  • 网站怎么做导航栏微信公众号官网登录
  • 1_ 掌握网站开发的基本流程 要求:熟悉网站开发与设计的基本流程.电子商城网站开发
  • 百度网站怎么建设河北省工程造价信息网官网
  • 阿里云网站模板网页设计的合适尺寸是多少
  • 做小程序和做网站哪个好让别人做网站推广需要多少钱
  • 做外贸的几个网站查询网域名解析
  • 酒泉如何做百度的网站seo研究中心好客站
  • 网站设计建设平台户县做网站
  • 一元云购网站开发wordpress博客空间
  • 深圳高端网站建设公司排名如何搭建局域网服务器
  • 照片管理网站模板高端网站开发哪家好
  • 黄冈网站制作wordpress为什么不能显示域名
  • 做网站设计怎么进企业电子商务网站建设与管理教材
  • 设计广告公司网站建设网站开发技术选择
  • 个人网站教程个人网站有必要备案吗