北京网站建设优化学校,哪个网站做的系统好用吗,黄山注册公司,vs2013网站开发代码1、为什么要重写equals方法#xff0c;为什么重写了equals方法后#xff0c;就必须重写hashcode方法#xff0c;为什么要有hashcode方法#xff0c;你能介绍一下hashcode方法吗#xff1f;
equals方法默认是比较内存地址#xff1b;为了实现内容比较#xff0c;我们需要…
1、为什么要重写equals方法为什么重写了equals方法后就必须重写hashcode方法为什么要有hashcode方法你能介绍一下hashcode方法吗
equals方法默认是比较内存地址为了实现内容比较我们需要重写equals方法。 equals和hashcode之间有一个重要的契约如果两个对象基于equals方法比较是相等的那么它们的hashcode必须相同如果比较不同他们的hashcode不一定不同但不同的对象应尽力返回不同的hashcode值以提高哈希表的性能。
如果只重写了equals方法而没有重写hashcode方法就会违反这个契约导致哈希表如HashMap和HashSet工作不正常例如两个内容相等的对象会被认为是不相等的因为它们的哈希码不同。
hashcode方法用于计算对象的哈希码这个哈希码用于在基于哈希的集合如HashSet、HashMap中快速查找对象哈希码是一个整数由对象的内容计算得到哈希码的作用是减少比较操作的次数提高查找效率。
public class test {public static void main(String[] args) {HashSetUser users new HashSet();//因为两个对象都是new出来的、所以地址不同哈希码也不同不会出现哈希冲突、不会调用equals判断、// 因此两个特征相同的对象就都添加到hashset中去了、解决方法就是重写hashcode()方法、users.add(new User(10,111));users.add(new User(10,111));for (User i:users) {System.out.println(i);}}
}
class User {int age;String name;public User(int age, String name) {this.age age;this.name name;}public int getAge() {return age;}Overridepublic String toString() {return User{ age age , name name \ };}Overridepublic boolean equals(Object o){if(thiso)return true;if(onull||getClass()!o.getClass()){return false;}User user(User) o;return age user.ageObjects.equals(name,user.name);}Override//重写了hashcode方法。public int hashCode() {return Objects.hash(age,name);}
}
因为重写了hashcode方法所以特征相同的对象他们的hash值是一样的会引起哈希冲突从而调用equals方法进行判断是否为同一对象、因为重写了equals方法所以这两个对象被判定为重复所以hashset里只有一份。
2、Object都有哪些方法 3、和equals都有有什么区别呢
4、类加载的过程、
5、JVM的内存模型以及内存结构、
6、GC机制及GC算法、你熟悉的垃圾收集器常问CMS G1以及这两者的区别
7、java的基本数据类型
8、sychronized关键字以及底层实现原理、锁升级的原理、
9、lock关键字以及底层实现原理、
10、CAS的原理、
11、sychronized和ReetrantLock区别为什么有了sychronized还要有Lock这个关键字
12、什么是悲观锁和乐观锁哪些锁是悲观锁哪些锁是乐观锁