黑马程序员技术交流社区
标题:
HashSet集合可以只复写hashCode,不复写equals吗?
[打印本页]
作者:
徐鹏辰
时间:
2015-8-5 13:17
标题:
HashSet集合可以只复写hashCode,不复写equals吗?
本帖最后由 徐鹏辰 于 2015-8-5 14:19 编辑
<p>import java.util.*;
import java.lang.*;
class HashSetTest
{
//输出方法
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
//建立HashSet集合
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("a2",12));
</p><p>
HashSet hs1 = new HashSet();
//添加元素
hs1.add(new Person(11));
hs1.add(new Person(12));
hs1.add(new Person(13));
hs1.add(new Person(13));</p><p>
HashSet hs2 = new HashSet();
//添加元素
hs2.add(new Person("z"));
hs2.add(new Person("v"));
hs2.add(new Person("b"));
hs2.add(new Person("z"));
Iterator it = hs2.iterator();
while(it.hasNext())
{
Person p = (Person)it.next();
sop(p.getName());
//sop(p.getAge())
//sop(p.getName()+","+p.getAge()+"--"+Integer.toHexString(p.hashCode())+"---"+p);
}
}
}
//自定义对象
class Person
{
private String name;
private int age;
Person(String name)
{
this.name = name;
}
Person(int age)
{
this.age = age;
}
Person(String name,int age)
{
this.age = age;
this.name = name;
}
//自定义hash值
public int hashCode()
{
//判断谁调用了该方法
//System.out.println(this.name+"....hashCode");
//return name.hashCode()+age*37;
return 60;
}
//比较对象方法
/*
public boolean equals(Object obj)
{
//判断是否属于Person类,不属于则直接返回。
if(!(obj instanceof Person))
return false;
//类型的强制转换
Person p = (Person)obj;
//判断方法是否调用,进而演示对象的比较过程
//System.out.println(this.name+"...equals.."+p.name);
//return this.name.equals(p.name) && this.age == p.age;//特有的比较方式
}
*/
//获取对象属性
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}</p>
复制代码
HashSet集合只复写hashCode,不复写Object类equals!
Object类中的equals方法比较的地址值。
String类中equals方法复写了Object类equals方法,特有的比较方式,比较字符串是否相同。
HashSet集合为何还有重复,不是应该比较地址值吗?是我哪里理解或者记错了!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2