
请问java hashCode() 和return的用法。
importjava.util.*;publicclassHasSetTest{publicstaticvoidsop(Objectobj){System.out.pri...
import java.util.*;
public class HasSetTest {
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
HashSet hs=new HashSet();
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
hs.add(new Person("a3",13));
hs.add(new Person("a4",14));
hs.add(new Person("a5",15));
Iterator it=hs.iterator();
while(it.hasNext())
{
Person p=(Person)it.next();
sop(p.getName()+"***"+p.getAge());
}
}
}
class Person
{
private String name;
private int age;
Person (String name,int age)
{
this.name=name;
this.age=age;
}
public int hashCode()
{
return 60;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p=(Person)obj;
return (this.name).equals(p.name)&&this.age==p.age;
}
public String getName ()
{
return name;
}
public int getAge()
{
return age;
}
}
请问:
public int hashCode()
{
return 60;
}
是怎样实现输出的Person不重复的? 展开
public class HasSetTest {
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
HashSet hs=new HashSet();
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
hs.add(new Person("a3",13));
hs.add(new Person("a4",14));
hs.add(new Person("a5",15));
Iterator it=hs.iterator();
while(it.hasNext())
{
Person p=(Person)it.next();
sop(p.getName()+"***"+p.getAge());
}
}
}
class Person
{
private String name;
private int age;
Person (String name,int age)
{
this.name=name;
this.age=age;
}
public int hashCode()
{
return 60;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p=(Person)obj;
return (this.name).equals(p.name)&&this.age==p.age;
}
public String getName ()
{
return name;
}
public int getAge()
{
return age;
}
}
请问:
public int hashCode()
{
return 60;
}
是怎样实现输出的Person不重复的? 展开
1个回答
展开全部
这里重写了equals方法,并没有使用hashcode,所以这里返回60并没有影响。
equals语句中比较了name还有age所以不会重复
equals语句中比较了name还有age所以不会重复
追问
但是如果没有hashcode,输出是会重复的
追答
hashSet重写equals方法必须重写hashCode。
主要原因是默认从Object继承来的hashCode是基于对象的ID实现的。
如果你重载了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询