A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 聂益飞 于 2013-3-26 19:35 编辑
  1. class Person {
  2.         private String name;
  3.         private int age;

  4.         public Person() {
  5.         }

  6.         public Person(String name, int age) {
  7.                 this.name = name;
  8.                 this.age = age;
  9.         }

  10.         public String getName() {
  11.                 return name;
  12.         }

  13.         public void setName(String name) {
  14.                 this.name = name;
  15.         }

  16.         public int getAge() {
  17.                 return age;
  18.         }

  19.         public void setAge(int age) {
  20.                 this.age = age;
  21.         }
  22.         public int hashCode()
  23.         {
  24.                 return this.name.hashCode()+this.age*17;
  25.         }
  26.         public boolean equals(Object obj)
  27.         {
  28.                 if(this == obj)
  29.         {
  30.                 return true;
  31.         }
  32.                 if(!(obj instanceof Person))
  33.         {
  34.                         return false;
  35.         }
  36.                 Person p = (Person)obj;
  37.                 return this.name.equals(p.name)&&this.age == p.age;
  38.         }
  39. }
复制代码
如上代码!!我想问的是!为什么HashSet集合在保证元素唯一性时,覆写的是对象的HashCode和equals方法,而不在其他地方覆写这两种方法,TreeSet的CompareTo方法同理!这样的话如果我要用set集合去存储已存在对象时不是要跑到对象里面去改源码???对于这种问题有解决办法吗??

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-26 12:35

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

3 个回复

倒序浏览
对象的HashCode ,和equals方法,本来就是应该在你创建对象的时候,就要重写的,你在设计的时候就可考虑到这个对象的如何来判断对象相等。
不然这就是你的设计问题了,没有考虑到程序的扩展性,和健壮性。
至于,TreeSet的比较,我们还可以让集合具有比较性,创建Comparator接口的实例,将你的比较方式在compare方法中去实现。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
              冒个泡,楼上正解~
回复 使用道具 举报
即使不写compare有自己的方法来保证唯一性,
但是如果有特殊需求,要用特定的属性来保证数据的唯一性,那就只能覆写了,
如你提出的这个问题,如果说今后要调整比较规则的话,我感觉把比较规则另写一个类比较好
也就是说:在对象的hashCode 和 equals 中只调用这个比较规则类,这样的话扩展时只改动比较规则类就OK了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马