黑马程序员技术交流社区

标题: HashSet存储的不是自定义对象时时怎么保证元素的唯一性的 [打印本页]

作者: 天晴了吗    时间: 2015-11-24 23:37
标题: HashSet存储的不是自定义对象时时怎么保证元素的唯一性的


作者: 天晴了吗    时间: 2015-11-24 23:39
和存储自定义一样的
作者: Myth、骞    时间: 2015-11-25 13:13
equals  and hashCode
作者: xi~yan    时间: 2015-11-25 19:06
是通过两个方法,hashCode和equals来完成。
如果元素的哈希值相同,才会判断equals是否为true,如果哈希值不同,则不会调用equals方法
例如学生类中保证学生唯一的两种方法编写如下:
public int hashCode(){
    return name.hashCode()+age*34;
}

public boolean equals(Object obj){
     if(!(obj instanceof Student))
           return false;
     Student s=(Student)obj;
      return this.name.equals(s.name) && this.age==s.age;
}
作者: jymheima    时间: 2015-11-26 14:25
在eclipse里面有的  选中即可
作者: jymheima    时间: 2015-11-26 14:27
在 eclipse的  source--> generate  hashCode() and equals()
作者: wunaihaoye    时间: 2015-11-27 12:04
上面说的都是自定义对象
不是自定义对象就是是系统给的那些类
通过查看API,系统给定的那些类都已经重写了Object类中hascode和equals方法
所以在存储时也不必再像自定义类一样手动重写hascode和equals方法
作者: zhauibuzhai    时间: 2015-11-27 13:56
{:2_32:}{:2_32:}{:2_32:}{:2_32:}
作者: 周亚飞    时间: 2015-12-14 14:30
像String类一样,查看api你能看到它已经重写了hashCode和equals方法
作者: yyt199108    时间: 2015-12-16 19:41
在自定义类中重写hashCode和equals方法
作者: boboyuwu    时间: 2015-12-20 12:13
因为HashSet判断元素是不是唯一,默认用的是hashcode 地址,所以如果存储的不是自己定义的,判断条件就是你存储的对象地址是不是一样的了。




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