黑马程序员技术交流社区
标题:
关于set集合保证唯一性的延伸问题求解答!!
[打印本页]
作者:
聂益飞
时间:
2013-3-25 20:55
标题:
关于set集合保证唯一性的延伸问题求解答!!
本帖最后由 聂益飞 于 2013-3-26 19:35 编辑
class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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 int hashCode()
{
return this.name.hashCode()+this.age*17;
}
public boolean equals(Object obj)
{
if(this == obj)
{
return true;
}
if(!(obj instanceof Person))
{
return false;
}
Person p = (Person)obj;
return this.name.equals(p.name)&&this.age == p.age;
}
}
复制代码
如上代码!!我想问的是!为什么HashSet集合在保证元素唯一性时,覆写的是对象的HashCode和equals方法,而不在其他地方覆写这两种方法,TreeSet的CompareTo方法同理!这样的话如果我要用set集合去存储已存在对象时不是要跑到对象里面去改源码???对于这种问题有解决办法吗??
作者:
itserious
时间:
2013-3-25 21:16
对象的HashCode ,和equals方法,本来就是应该在你创建对象的时候,就要重写的,你在设计的时候就可考虑到这个对象的如何来判断对象相等。
不然这就是你的设计问题了,没有考虑到程序的扩展性,和健壮性。
至于,TreeSet的比较,我们还可以让集合具有比较性,创建Comparator接口的实例,将你的比较方式在compare方法中去实现。
作者:
徐鸿燕
时间:
2013-3-25 22:28
冒个泡,楼上正解~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2