黑马程序员技术交流社区

标题: 关于set集合保证唯一性的延伸问题求解答!! [打印本页]

作者: 聂益飞    时间: 2013-3-25 20:55
标题: 关于set集合保证唯一性的延伸问题求解答!!
本帖最后由 聂益飞 于 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集合去存储已存在对象时不是要跑到对象里面去改源码???对于这种问题有解决办法吗??
作者: itserious    时间: 2013-3-25 21:16
对象的HashCode ,和equals方法,本来就是应该在你创建对象的时候,就要重写的,你在设计的时候就可考虑到这个对象的如何来判断对象相等。
不然这就是你的设计问题了,没有考虑到程序的扩展性,和健壮性。
至于,TreeSet的比较,我们还可以让集合具有比较性,创建Comparator接口的实例,将你的比较方式在compare方法中去实现。
作者: 徐鸿燕    时间: 2013-3-25 22:28
              冒个泡,楼上正解~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2