java基礎
Posted xblovexb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基礎相关的知识,希望对你有一定的参考价值。
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基礎的主要内容,如果未能解决你的问题,请参考以下文章
java基礎有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。