27.hashCode( )和toString( )

  • hashCode( )的作用
    • 什么是Hash算法
      • 根据输入的数据,得到散列值,并且散列值对于输入数据来说是唯一的

    • Hash算法的特点
      • 存储数据

  • hashCode( )的实现方法
    • 所有类都拥有hashCode( )方法,无参数,返回值是一个整型
    • hashCode( )复写的原则:如果两个对象用equals相比是相等的话,那么这两个对象调用hashCode所返回的hash值也应该是相等的
  1. classUser{
  2. String name;
  3. int age;
  4. publicUser(){
  5. }
  6. publicUser(String name,int age){
  7. this.name = name;
  8. this.age = age;
  9. }
  10. public boolean equals(Object obj){
  11. if(this== obj){
  12. returntrue;
  13. }
  14. //instanceof作用:判断前面的对象是不是后面对象的类型
  15. boolean b = obj instanceof User;
  16. if(b){
  17. //obj向下转型为User对象
  18. User u =(User)obj;
  19. if(this.age == u.age &&this.name.equals(u.name)){
  20. returntrue;
  21. }
  22. else{
  23. returnfalse;
  24. }
  25. }
  26. else{
  27. returnfalse;
  28. }
  29. }
  30. //复写User的hashCode
  31. publicint hashCode(){
  32. int result =17;
  33. result =31* result + age;
  34. result =31* result +name.hashCode();
  35. return result;
  36. }
  37. }
  1. import java.util.*;
  2. publicclassTest{
  3. publicstaticvoid main(String args []){
  4. User u =newUser("zhangsan",12);
  5. HashMap<User,String>map=newHashMap<User,String>();
  6. map.put(u,"abc");
  7. //通过计算键的hashcode来判断有没有存在相应的值
  8. String s =map.get(newUser("zhangsan",12));
  9. System.out.println(s);
  10. }
  11. }

结果:

D:\work\src>javac *.java

D:\work\src>java Test

abc

  • toString( )的作用
    • 所有的类当中都拥有toStrng( )方法
    • 作用:无论什么类型的对象,都把他转换成一个String字符串,使对象的可读性更强
  • toString( )的实现方法
  1. classUser{
  2. String name;
  3. int age;
  4. publicUser(){
  5. }
  6. publicUser(String name,int age){
  7. this.name = name;
  8. this.age = age;
  9. }
  10. public boolean equals(Object obj){
  11. if(this== obj){
  12. returntrue;
  13. }
  14. //instanceof作用:判断前面的对象是不是后面对象的类型
  15. boolean b = obj instanceof User;
  16. if(b){
  17. //obj向下转型为User对象
  18. User u =(User)obj;
  19. if(this.age == u.age &&this.name.equals(u.name)){
  20. returntrue;
  21. }
  22. else{
  23. returnfalse;
  24. }
  25. }
  26. else{
  27. returnfalse;
  28. }
  29. }
  30. //复写User的hashCode
  31. publicint hashCode(){
  32. int result =17;
  33. result =31* result + age;
  34. result =31* result +name.hashCode();
  35. return result;
  36. }
  37. publicString toString(){
  38. String result ="age:"+age+","+"name:"+ name;
  39. return result; 
  40. }
  41. }
  1. import java.util.*;
  2. publicclassTest{
  3. publicstaticvoid main(String args []){
  4. User u =newUser("zhangsan",12);
  5. System.out.println(u);
  6. }
  7. }

结果:

D:\work\src>javac *.java

D:\work\src>java Test

age:12,name:zhangsan

来自为知笔记(Wiz)

时间: 2024-10-24 11:34:04

27.hashCode( )和toString( )的相关文章

hashCode()与toString()

1. hashCode()的作用 2. hashCode()的实现方法 3. toString()的作用 4. toString()的实现方法 hashCode和toString都存在于Object中   散列值是唯一的 Sun公司规定:如果两个对象equals了, 产生的hashCode也会相等 这个和equals一样以后会用别的方法生成, 现在大致了解即可 3. toString()的作用 toString产生字符串 1 class User{ 2 String name; 3 int ag

Java:验证在类继承过程中equals()、 hashcode()、toString()方法的使用

以下通过实际例子对类创建过程汇中常用的equals().hashcode().toString()方法进行展示,三个方法的创建过程具有通用性,在项目中可直接改写. //通过超类Employee和其子类Manager ,验证在类继承过程中equals().hashcode().toString()方法的使用.package equals;public class EqualsTest{    public static void main(String[] args){        Employ

第38节:hashCode()与toString()与equals()函数的作用,内部类和匿名内部类

hashCode()和toString() Hash算法是把任意长度的数据通过hash算法成为散列值 hashCode() public int hashCode(){ int result = 10; result = 2*result + age; result = 2*result + name.hashCode(); return result; } toString() public String toString(){ String result = "age:"+age+

Java记录 -57- Object的equals、hashcode和toString方法

Object的hashCode方法是最基础的,equals和toString方法都间接的使用了hashCode方法. 一般情况下,我们在重写一个类的equals方法时,都会连带重写hashCode方法.IDE工具eclipse给我们提供了快捷的重写equals和hashCode的方法,而不是其中一个,更说明了这个两个方法一般都会一块进行重写. Object的equals方法: public boolean equals(Object obj) {     return (this == obj)

java中equals与hashCode还有tostring方法学习记录

package javas.fristdome01; import org.testng.annotations.Test; class Person { private String name; private int age; Person() { } Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void s

【原创】关于java对象需要重写equals方法,hashcode方法,toString方法 ,compareto()方法的说明

在项目开发中,我们都有这样的经历,就是在新增表时,会相应的增加java类,在java类中都存在常见的几个方法,包括:equals(),hashcode(),toString() ,compareto()这四个方法,对于刚刚接触java的初学者来说,对于这块可以没有更深入的了解,只是单纯意义上的复制粘贴,并没有很好的去了解.现在借用这个时间给大家说说这几个方法作用. equals: 比较两个对象相等时使用(需要配合Hashcode一起使用,在后边再进行详细解释)   hashcode: 重写has

How to implement equals() and hashCode() methods in Java[reproduced]

Part I:equals() (javadoc) must define an equivalence relation (it must be reflexive, symmetric, and transitive). In addition, it must be consistent (if the objects are not modified, then it must keep returning the same value). Furthermore, o.equals(n

2015/11/16----------------------super.toString();

super.toString();调用父类toString()方法这里默认父类都是ObjectObject的toString方法,输出的是对象的格式:全路径@全限定名Hashcode super.toString();调用父类toString()方法这里默认父类都是ObjectObject的toString方法,输出的是对象的格式:全路径@全限定名Hashcode

Java笔记(27):反射

1.获取class文件对象的三种方式 1 package cn.itcast_01; 2 3 public class Person { 4 private String name; 5 int age; 6 public String address; 7 8 public Person() { 9 } 10 11 private Person(String name) { 12 this.name = name; 13 } 14 15 Person(String name, int age)