java hash equal_java中hashcode和equals这两个方法的用法?

publicclassGenericSet{publicstaticvoidmain(String[]args){Setset=newHashSet();set.add("aa");set.add("bb");set.add("cc");set.add("dd");for(Iteratori...

public class GenericSet {

public static void main(String[] args) {

Set set = new HashSet();

set.add("aa");

set.add("bb");

set.add("cc");

set.add("dd");

for(Iterator iter = set.iterator(); iter.hasNext();){

String value = iter.next();

System.out.println(value);

}

System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

Set set2 = new HashSet();

set2.add(new People("zhangsan",18,"luoyang"));

set2.add(new People("lisi",18,"zhengzhou"));

set2.add(new People("wangwu",18,"beijing"));

for(Iterator iter = set2.iterator();iter.hasNext();){

People people = iter.next();

String name = people.getName();

int age = people.getAge();

String Address = people.getAddress();

System.out.println(name+","+age+","+Address);

}

}

}

class People{

private String name;

private int age;

private String Address;

public People(String name, int age, String Address){

this.name = name;

this.age = age;

this.Address = Address;

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + ((Address == null) ? 0 : Address.hashCode());

result = prime * result + age;

result = prime * result + ((name == null) ? 0 : name.hashCode());

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

People other = (People) obj;

if (Address == null) {

if (other.Address != null)

return false;

} else if (!Address.equals(other.Address))

return false;

if (age != other.age)

return false;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

return true;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getAddress() {

return Address;

}

public void setAddress(String address) {

Address = address;

}

}

这个里面people类里面 为什么要生成hashcode和equals这两个方法? 不生成这两个方法这个程序照样可以运行,没有受影响啊? hashcode和equals这两个方法何时需要被重写啊?

展开

Java,要实现对象的相等比较,需要重写equals()和hashCode()方法equals()方法是用来比较两个对象是否相等的,它的默认实现是比较两个对象的引用地址。如果要比较两个对象的值是否相等,需要重写equals()方法。在重写equals()方法时,需要满足以下条件: 1. 对称性:如果a.equals(b)返回true,那么b.equals(a)也应该返回true。 2. 自反性:任何对象和自己比较,都应该返回true,即a.equals(a)应该返回true。 3. 传递性:如果a.equals(b)返回true,b.equals(c)也返回true,那么a.equals(c)也应该返回true。 4. 一致性:如果a.equals(b)返回true,在a和b没有改变的情况下,多次调用a.equals(b)应该返回true。 5. 非空性:任何对象和null比较,都应该返回false,即a.equals(null)应该返回false。 hashCode()方法是用来返回对象的哈希码的,它的默认实现是返回对象的引用地址的哈希码。如果要使用对象的值作为哈希码,也需要重写hashCode()方法。在重写hashCode()方法时,需要满足以下条件: 1. 如果a.equals(b)==true,那么a.hashCode()==b.hashCode()也应该成立。 2. 如果a.equals(b)==false,那么a.hashCode()和b.hashCode()尽量不要相同,以提高哈希表的效率。 下面是一个实现equals()和hashCode()方法的示例: ```java public class Person { private String name; private int age; // 构造方法、getter和setter方法省略 @Override public boolean equals(Object obj) { if (obj == null || !(obj instanceof Person)) { return false; } Person other = (Person) obj; return Objects.equals(name, other.name) && age == other.age; } @Override public int hashCode() { return Objects.hash(name, age); } } ``` 在上面的示例equals()方法比较了两个Person对象的name和age属性是否相等,hashCode()方法使用了Java 7的Objects类来计算哈希码。注意,在equals()方法要判断传入的参数是否为null和是否是Person对象,以避免出现NullPointerException和ClassCastException异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值