java中hashCode()方法的作用
2016-03-26 14:05
429 查看
hashcode方法返回该对象的哈希码值。
hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先通过hashCode()找到相应的位置,然后再根据equals()方法判断这个位置上的对象与当前要插入的对象是不是同一个。
所以,Java对于eqauls方法和hashCode方法是这样规定的:
*如果两个对象相同,那么它们的hashCode值一定要相同;
*如果两个对象的hashCode相同,它们并不一定相同。
如下代码:
hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先通过hashCode()找到相应的位置,然后再根据equals()方法判断这个位置上的对象与当前要插入的对象是不是同一个。
所以,Java对于eqauls方法和hashCode方法是这样规定的:
*如果两个对象相同,那么它们的hashCode值一定要相同;
*如果两个对象的hashCode相同,它们并不一定相同。
如下代码:
package demos; import java.util.HashSet; import java.util.Set; /** * Created by hu on 2016/3/26. */ public class Student { private String name; private Integer age; public Student(String name, Integer age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String toString() { return name + "'s age is " + String.valueOf(age); } public boolean equals(Object other) { if(this == other) return true; if(other == null) return false; if(!(other instanceof Student)) return false; final Student stu = (Student)other; if(!getName().equals(stu.getName())) return false; if(!getAge().equals(stu.getAge())) return false; return true; } public int hashCode() { int result = getName().hashCode(); result = 29*result + getAge().hashCode(); return result; } public static void main(String[] args){ Set<Student> set = new HashSet<Student>(); Student s1 = new Student("ZhangSan", 13); Student s2 = new Student("ZhangSan", 13); System.out.println(s1.hashCode()); System.out.println(s2.hashCode()); set.add(s1); set.add(s2); System.out.println(set); System.out.println(s1.equals(s2)); } }
相关文章推荐
- Java基础之数组篇
- Spring Jdbc
- 大数相乘 java
- 使用Java开发OpenCV程序-1.开发环境安装与配置
- 做一个合格的程序猿之浅析Spring AOP源码(十八) Spring AOP开发大作战源码解析
- 初级排序算法之冒泡、选择、插入、希尔排序(附Java实现和分析)
- 简单的Java继承示例!
- day09 用Myeclipse开发servlet,servlet的生命周期(面试题),ServletContext
- java代理、cglib、java proxy
- Java设计模式之“抽象工厂模式“
- Java包名命名规则(转载)
- Android 增强版百分比布局库 Eclipse Demo
- Java配置jdk图文教程
- java日期时间Date类
- Spring 接口代理 类代理
- Java中的static关键字解析
- java序列化简单使用
- JAVA 注解入门
- JAVA 内存管理
- java文件重命名