java基礎

2021-04-13 09:29

阅读:684

标签:重写   列表   不同类   rri   des   java   cas   相同   创建   

equals要求:
1. 对称性:如果x.equals(y)返回是"true",那么y.equals(x)也应该返回是"true"。 2. 反射性:x.equals(x)必须返回是"true"。 3. 类推性:如果x.equals(y)返回是"true",而且y.equals(z)返回是"true",那么z.equals(x)也应该返回是"true"。 4. 一致性:如果x.equals(y)返回是"true",只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是"true"。 5. 非空性:x.equals(null),永远返回是"false";x.equals(和x不同类型的对象)永远返回是"false"。
 1         /**
 2          * @desc 覆盖equals方法
 3          */
 4         @Override
 5         public boolean equals(Object obj){
 6             if(obj == null){
 7                 return false;
 8             }
 9 
10             //如果是同一个对象返回true,反之返回false
11             if(this == obj){
12                 return true;
13             }
14 
15             //判断是否类型相同
16             if(this.getClass() != obj.getClass()){
17                 return false;
18             }
19 
20             Person person = (Person)obj;
21             return name.equals(person.name) && age==person.age;
22         }

 

1         /**
2          * @desc重写hashCode
3          */
4         @Override
5         public int hashCode(){
6             int nameHash =  name.toUpperCase().hashCode();
7             return nameHash ^ age;
8         }

注:

1.hashCode() 在散列表中才有用,在其它情况下没用,如HashMap,Hashtable,HashSet。

2.创建Person类的散列表集合,必须同时覆盖Person类的equals() 和 hashCode()方法。

才有如下情況:

        1)、如果两个对象相等,那么它们的hashCode()值一定相同。
              这里的相等是指,通过equals()比较两个对象时返回true。
        2)、如果两个对象hashCode()相等,它们并不一定相等。
               因为在散列表中,hashCode()相等,即两个键值对的哈希值相等。然而哈希值相等,并不一定能得出键值对相等。补充说一句:“两个不同的键值对,哈希值相等”,这就是哈希冲突。

 

參考文章:

https://www.cnblogs.com/skywang12345/p/3324958.html

 

java基礎

标签:重写   列表   不同类   rri   des   java   cas   相同   创建   

原文地址:https://www.cnblogs.com/xblovexb/p/13343209.html


评论


亲,登录后才可以留言!