首页 > 代码库 > 27.hashCode( )和toString( )

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)



27.hashCode( )和toString( )