1. package com.charles.collection;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. public class Point {
  7. /**
  8. * @author Charles
  9. * @desc introduce hashcode and equals methods
  10. */
  11.  
  12. private Integer x;
  13. private Integer y;
  14.  
  15. public Point() {
  16. }
  17.  
  18. public Point(int x, int y) {
  19. this.x = x;
  20. this.y = y;
  21. }
  22.  
  23. public static void main(String[] args) {
  24. /*如果不重写equals方法,one与two对象就不相等,这是因为Point类
  25. * 默认继承父类Object的equals方法,而Object类的equals方法
  26. * 比较的是引用相等
  27. */
  28. Point one = new Point(3,3);
  29. Point two = new Point(3,3);
  30. if(one.equals(two)){
  31. System.out.println("one equals two..");
  32. }else{
  33. System.out.println("one NOT equals two..");//注释掉当前类的equals方法,可输出该结果
  34. }
  35.  
  36. /*
  37. * 这些又与hashcode方法有什么关系呢?实际上如果Point类不参与
  38. * 与hash算法相关的存储运算,重写hashcode方法是没有必要的。
  39. */
  40.  
  41. Set<Point> sets = new HashSet<Point>();
  42. sets.add(one);
  43. sets.add(two);
  44. //注释掉hashcode与equals方法,输出结果:2;否则为1, 原因是对象one与two的hash值相等,且相互equals,先放进set集合中的对象被后者覆盖了
  45. System.out.println(sets.size());
  46. /*
  47. * 猜猜留下的那个唯一对象是谁呢?
  48. * 测试方法可用==判断
  49. */
  50. if(one == sets.iterator().next()){
  51. System.out.println("Yeah, one left~~");
  52. }else if(one == sets.iterator().next()){
  53. System.out.println("Oh, two left~~");
  54. }
  55.  
  56. //实际结果是one,这是因为当set集合中已经存在,hashcode与equals相等的元素时,便不再将当前元素放入集合了,这也可以通过add方法的返回值检测
  57. }
  58.  
  59. public Integer getX() {
  60. return x;
  61. }
  62.  
  63. public void setX(Integer x) {
  64. this.x = x;
  65. }
  66.  
  67. public Integer getY() {
  68. return y;
  69. }
  70.  
  71. public void setY(Integer y) {
  72. this.y = y;
  73. }
  74.  
  75. @Override
  76. public int hashCode() {
  77. final int prime = 31;
  78. int result = 1;
  79. result = prime * result + ((x == null) ? 0 : x.hashCode());
  80. result = prime * result + ((y == null) ? 0 : y.hashCode());
  81. return result;
  82. }
  83.  
  84. @Override
  85. public boolean equals(Object obj) {
  86. if (this == obj)
  87. return true;
  88. if (obj == null)
  89. return false;
  90. if (getClass() != obj.getClass())
  91. return false;
  92. Point other = (Point) obj;
  93. if (x == null) {
  94. if (other.x != null)
  95. return false;
  96. } else if (!x.equals(other.x))
  97. return false;
  98. if (y == null) {
  99. if (other.y != null)
  100. return false;
  101. } else if (!y.equals(other.y))
  102. return false;
  103. return true;
  104. }
  105.  
  106. @Override
  107. public String toString() {
  108. return "Point [x=" + x + ", y=" + y + "]";
  109. }
  110.  
  111. }

hashcode-equals方法的更多相关文章

  1. HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)

    引言:我们都知道HashSet这个类有add   remove   contains方法,但是我们要深刻理解到底是怎么判断它是否重复加入了,什么时候才移除,什么时候才算是包括????????? add ...

  2. java中hashCode方法与equals方法的用法总结

    首先,想要明白hashCode的作用,必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set. 前者集合内的元素是有序的,元素可以重 ...

  3. equals方法,hashcode()方法

    Object类的equals 方法 用来检测两个对象是否相等,即两个对象的内容是否相等,区分大小写.   (一)说到equals方法,不得不提一下==号. ==用于比较引用和比较原生数据类型时具有不同 ...

  4. 用HashSet的add方法谈hashcode和equals方法重写

    本文主要通过用HashSet的add方法讲一下hashCode和equals方法重写.错误的地方望指正. 1.了解HashSet的add方法 了解一个方法的好办法是看源码,所以先看源码 private ...

  5. 重写equals()方法时,需要同时重写hashCode()方法

    package com.wangzhu.map; import java.util.HashMap; /** * hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,<br/&g ...

  6. 为什么重写equals方法还要重写hashcode方法?

    我们都知道Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类.Ojbect类中有两个方法equals.hashCode,这两个方法都是用来比较两个对象是否相等的. 在未重写 ...

  7. [改善Java代码]覆写equals方法必须覆写hashCode方法

    覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...

  8. JAVA中的各种 哈希码(HashCode) 与 equals方法在HIBERNATE的实际应用[转载]

    1.什么是哈希码(HashCode) 在Java中,哈希码代表对象的特征.例如对象 Java代码 String str1 = “aa”, str1.hashCode= 3104 String str2 ...

  9. Java 中正确使用 hashCode 和 equals 方法

    在这篇文章中,我将告诉大家我对hashCode和equals方法的理解.我将讨论他们的默认实现,以及如何正确的重写他们.我也将使用Apache Commons提供的工具包做一个实现. 目录: hash ...

  10. 为什么要重写equals()方法与hashCode()方法

    在java中,所有的对象都是继承于Object类.Ojbect类中有两个方法equals.hashCode,这两个方法都是用来比较两个对象是否相等的. 在未重写equals方法我们是继承了object ...

随机推荐

  1. 初学JVM

    最近在读周志明的<深入理解Java虚拟机:JVM高级特性与最佳实践>,从中学到了很多,有些人可能会问为什么我们要学习JVM,他有什么用?在这里我想说一下,并不是这本书是大家都推荐的说有用处 ...

  2. div+css的属性

    div+css的属性 gCascading Style Sheet 层叠式样式表 ==> 层叠样式表 Internal Style Sheet 内部样式表 External Style Shee ...

  3. javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)

    javaCV图像处理系列: 一.javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 二.javaCV图像处理之2:实时视频添 ...

  4. jsp,jquery,spring mvc 实现导出文件

    需求:在界面上选择一个日期,然后点击导出按钮,直接导出选择月份的考勤excel文件. 这篇文章主要是介绍如何下载文件! jsp中代码: <div class="form-group&q ...

  5. 转换String三种方式比较:toString()、String.valueOf()、(String)

    简单介绍: 1.toString,需要保证调用这个方法的类.方法.变量不为null,否则会报空指针. 2.String.valueOf.这个方法在使用的时候是有些特殊的.一般情况下,如果是确定类型的n ...

  6. javascriptDOM节点

    DOM把层次中的每一个对象都称之为节点(NODE),以HTML超文本标记语言为例:整个文档的一个根就是<html>,在DOM中可以使用 document.documentElement来访 ...

  7. asp.net core 教程(七)-异常处理、静态文件

    Asp.Net Core-异常处理 Asp.Net Core-异常处理 在这一章,我们将讨论异常和错误处理.当 ASP.NET Core应用程序中发生错误时,您可以以各种不同的方式来处理.让我们来看看 ...

  8. 14.Java中的Future模式

    jdk1.7.0_79  本文实际上是对上文<13.ThreadPoolExecutor线程池之submit方法>的一个延续或者一个补充.在上文中提到的submit方法里出现了Future ...

  9. An impassioned circulation of affection

    An impassioned circulation of affection time limit per test 2 seconds memory limit per test 256 mega ...

  10. 选课 树形DP+多叉树转二叉树+dfs求解答案

    问题 A: 选课 时间限制: 1 Sec  内存限制: 128 MB 题目描述 大 学里实行学分.每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分.学生最后的学分是他选修的各门 ...