hashcode方法返回该对象的哈希码值。
      hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先通过hashCode()找到相应的位置,然后再根据equals()方法判断这个位置上的对象与当前要插入的对象是不是同一个。
所以,Java对于eqauls方法和hashCode方法是这样规定的:
   *如果两个对象相同,那么它们的hashCode值一定要相同;
   *如果两个对象的hashCode相同,它们并不一定相同。

如下代码:

  1. package demos;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. /**
  7. * Created by hu on 2016/3/26.
  8. */
  9. public class Student {
  10. private String name;
  11. private Integer age;
  12. public Student(String name, Integer age) {
  13. this.name = name;
  14. this.age = age;
  15. }
  16.  
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20.  
  21. public String getName() {
  22. return name;
  23. }
  24.  
  25. public Integer getAge() {
  26. return age;
  27. }
  28.  
  29. public void setAge(Integer age) {
  30. this.age = age;
  31. }
  32.  
  33. public String toString() {
  34. return name + "'s age is " + String.valueOf(age);
  35. }
  36.  
  37. public boolean equals(Object other) {
  38. if(this == other)
  39. return true;
  40. if(other == null)
  41. return false;
  42. if(!(other instanceof Student))
  43. return false;
  44.  
  45. final Student stu = (Student)other;
  46. if(!getName().equals(stu.getName()))
  47. return false;
  48. if(!getAge().equals(stu.getAge()))
  49. return false;
  50. return true;
  51. }
  52.  
  53. public int hashCode() {
  54. int result = getName().hashCode();
  55. result = 29*result + getAge().hashCode();
  56. return result;
  57. }
  58.  
  59. public static void main(String[] args){
  60. Set<Student> set = new HashSet<Student>();
  61. Student s1 = new Student("ZhangSan", 13);
  62. Student s2 = new Student("ZhangSan", 13);
  63. System.out.println(s1.hashCode());
  64. System.out.println(s2.hashCode());
  65. set.add(s1);
  66. set.add(s2);
  67. System.out.println(set);
  68. System.out.println(s1.equals(s2));
  69. }
  70. }

java中hashCode()方法的作用的更多相关文章

  1. 自己(转)JAVA中toString方法的作用

    JAVA中toString方法的作用 因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.print ...

  2. Java中hashCode()方法以及HashMap()中hash()方法

    Java的Object类中有一个hashCode()方法: public final native Class<?> getClass(); public native int hashC ...

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

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

  4. 对Java中HashCode方法的深入思考

    前言 最近在学习 Go 语言,Go 语言中有指针对象,一个指针变量指向了一个值的内存地址.学习过 C 语言的猿友应该都知道指针的概念.Go 语言语法与 C 相近,可以说是类 C 的编程语言,所以 Go ...

  5. Java中finalize()方法的作用

    finalize方法是Object提供的的实例方法,使用规则如下: 当对象不再被任何对象引用时,GC会调用该对象的finalize()方法 finalize()是Object的方法,子类可以覆盖这个方 ...

  6. JAVA中toString方法的作用

    因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不 ...

  7. JAVA中toString方法的作用(转)

    因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”. 它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不 ...

  8. Java中hashCode方法的理解以及此小结的总结练习(代码)

    笔记: “散列码”就是用来把一堆对象散到各自的队列里去的一种标识码. 举个形象一点的例子,一年有 365 天,从 1 编号到 365,下面我定义一种编码方法,每个人按照他生日那天的编号作为他的标识码, ...

  9. java中 flush()方法的作用

    flush() 是清空,而不是刷新啊.一般主要用在IO中,即清空缓冲区数据,就是说你用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还 ...

随机推荐

  1. PHP正则表达式;数组:for()遍历、 foreach ()遍历、each()list()组合遍历;指针遍历

    正则表达式:    1.定界符号        任何字符,一般用  //    2. 模式修正符i        写在定界符外面后面,可不区分大小写    3.preg_replace($reg,&q ...

  2. 获取枚举Description 属性

    /// <summary> /// 获取枚举变量值的 Description 属性 /// </summary> /// <param name="obj&qu ...

  3. php判断爬虫

    function checkrobot($useragent = ''){ static $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos ...

  4. Kib Kb KB KIB 区别

    今天和同事聊了一下Kib Kb KB KIB这几个单位的含义及其区别,自己在网上也查了查资料,总结如下: Ki 和 K 只是数学单位 Ki = 1024 K  = 1000 这二者之间没有任何联系 B ...

  5. MongoDB创建用户

    1.在创建用户之前,我们首先应该启动mongodb的用户验证功能,否则建立用户是没有意义的! 2.使用 //这个123用户拥有test1数据库的数据库管理员权限,拥有test2数据库的读取权限 db. ...

  6. socketserve及其应用

    1.cmd命令 利用socket socket服务端 import socket import subprocess s = socket.socket() s.bind(("127.0.0 ...

  7. Celery - Best Practices

    If you've worked with Django at some point you probably had the need for some background processing ...

  8. C#实现二叉查找树

    简介 树是一种非线性结构.树的本质是将一些节点由边连接起来,形成层级的结构.而二叉树是一种特殊的树,使得树每个子节点必须小于等于2.而二叉查找树又是一类特殊的二叉树.使得每一个节点的左节点或左子树的所 ...

  9. iOS 的 XMPPFramework 简介

    XMPPFramework是一个OS X/iOS平台的开源项目,使用Objective-C实现了XMPP协议(RFC-3920),同时还提供了用于读写XML的工具,大大简化了基于XMPP的通信应用的开 ...

  10. Java: arr==null vs arr.length==0

    当 arr 是一个array时,写Java开始的corner case常常会写类似下面的语句: if(arr == null || arr.length == 0){ return 0; } 其实这是 ...