黑马程序员技术交流社区

标题: 集合类遇到难题 [打印本页]

作者: 12300123    时间: 2015-4-11 21:46
标题: 集合类遇到难题
看毕向东老师讲的集合类,搞不明白HsahSet集合为何要复写Object类的toString()方法和HashCode()及equals方法呢,看得好迷糊,今天一天都在看这个内容了。什么时候需要复写Object类的toString()方法呢?谁给个详细的解答啊,求。

作者: 奔放的龙小胖    时间: 2015-4-11 21:54
毕姥爷是不是每次都要在后面添加一个这个方法

  1. public  static void sop(Object obj){
  2.     System.out.println(obj);
  3. }
复制代码
?
那是因为方便打印时候输出字符串形式的数据吧!
(个人肤浅见解....)
作者: natsu647    时间: 2015-4-11 23:23
因为HsahSet主要就是用HashCode()及equals()进行判断是否相同,具体工作时根据添加的对象,重写HashCode()及equals()方便判断。
作者: 撑起一个家    时间: 2015-4-12 00:29
HashSet底层数据结构是哈希表。
                它依赖两个方法:hashCode()和equals()
                顺序:
                        首先,判断hashCode()值是否相同。
                                相同:
                                        继续走equals()方法,根据其返回值:
                                                true:说明元素重复,不添加到集合。
                                                false:说明元素不重复,添加到集合。
                                不同:直接添加到集合。

作者: 撑起一个家    时间: 2015-4-12 00:30
确保HashSet元素的唯一性
作者: 12300123    时间: 2015-4-12 08:46
撑起一个家 发表于 2015-4-12 00:29
HashSet底层数据结构是哈希表。
                它依赖两个方法:hashCode()和equals()
                顺序:

恩,就是刚看的迷迷糊糊。
作者: 突然世界晴    时间: 2015-4-12 09:18
toString 方法复写是根据你需求来的,如果你想通过toString方法获取集合里面的内容就要复写,
不复写就是调用Objec里面的toString方法返回的应该是地址值
作者: 杨大萌    时间: 2015-4-12 09:23
Object类是所有类的父类,HashSet集合用到父类的toString方法时,就要复写父类的方法,以完成自己想要的功能。equals方法也是一样的,在Object类定义时,并不知道将来哪一个子类会用到这方法,所以它定义equals的时候,很简单,就是比较两个对象的内存地址,可是现实开发中,我们常常要比较两个对象的时候,不是要比较内存地址,而是要比较对象内容是否相同,所以所有继承Object类,想要使用equals来完成比较的时候,都要复写Object类的equals方法,以达成比较两个对象是否相同的功能。你只要把复写的那块整明白了,后面的就好理解了。
作者: lhtwm1    时间: 2015-4-12 23:01
toString()  是个打印的转换的方法  hashcode 的equals  是做比较的




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