C o m p a r a t o r C o m p a r a b l e在使用的时候是否需要重写某些 方法比如equalshashcode。为什么要重写呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼上说的,我也是这么认为的,不过如果要重写equals的话,那么一般也要同时重写hashcode 说的对,重写equals方法后重写hashcode方法是为了提高哈希表的性能,在哈希表中一般是通过每个数据的hashcode值(就是hashcode方法的返回值)相等和equals方法的结果为true而决定,所以重写了equals方法后最好重写hashcode方法,这样就能维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。 有利于提高哈希表性能~~ 不是什么性能啊。是为了防止map的key无法区别不同的对象啊,很多对象无法区别开来啊 compareto方法必须重写,其他没有要求 如果用comparator的话 就自己写一个比较器 实现compare即可如果用comparable的话 就一定要在实现类里面实现 compareTo实际上如果使用IDE的话你可以选择自动添加未实现的方法 很方便的至于equals 和hashcode方法就如同3楼所说,当你用hashset时,所添加的对象是依赖hashcode方法的,虽然你不写编译不会报错,但是为了使得代码效率更高还是手动将hashcode和equals方法写上 如果用comparator的话 就自己写一个比较器 实现compare即可 如果用comparable的话 就一定要在实现类里面实现 compareTo 就是这样,自己试下就都清楚了。 这个我知道啊但是equals hashcode是不是要重写啊如果不重写会不会有问题啊? 是啊 ,如果造出key相同而value不同,那么要他们两个对象将放在同一个哈希桶里,那样就会影响查找的性能! 这个问题可以这样来理解: 1、如果你要比较基本数据类型,重写就没有必要 2、如果你要比较的是引用类型,那么怎么能判断该类型是同一对象呢?这就是问题的关键 3、hashcode是根据每个对象的内存位置来计算,因此不同的对象会有相同的hashcode 4、如果你要强制两个不同的对象相同,要么持有相同的引用,要么重写hashcode及equals方法,如两个学生对象,你可以重写认为只要名字相同就是同一对象 5、因此排序时才能够按照你预想的思路去实现个人的一点鄙见 String数组初始化 求DataOutputStream初始化差异比较 DES算法如果解决数据必须是8的倍数的限制 java swing 实现图片的从右至左循环移动并且可以添加新图片本笨程序中图片的重叠问题如何解决” 如何获得java table的影响行 InputStreamReader的编码问题,怎么整都出不来 ResultSet问题 今天忽然发现了这么个问题?! 如何将 byte数组转化成 char数组? JB5的安装问题,高分相送。 java 匿名类与接口的用法 Java正则表达式"句号"问题
不是什么性能啊。是为了防止map的key无法区别不同的对象啊,很多对象无法区别开来啊
如果用comparable的话 就一定要在实现类里面实现 compareTo
实际上如果使用IDE的话你可以选择自动添加未实现的方法 很方便的
至于equals 和hashcode方法就如同3楼所说,当你用hashset时,所添加的对象是依赖hashcode方法的,虽然你不写编译不会报错,但是为了使得代码效率更高还是手动将hashcode和equals方法写上
如果用comparable的话 就一定要在实现类里面实现 compareTo
就是这样,自己试下就都清楚了。
这个我知道啊
但是
equals
hashcode是不是要重写啊如果不重写会不会有问题啊?
是啊 ,如果造出key相同而value不同,那么要他们两个对象将放在同一个哈希桶里,那样就会影响查找的性能!
1、如果你要比较基本数据类型,重写就没有必要
2、如果你要比较的是引用类型,那么怎么能判断该类型是同一对象呢?这就是问题的关键
3、hashcode是根据每个对象的内存位置来计算,因此不同的对象会有相同的hashcode
4、如果你要强制两个不同的对象相同,要么持有相同的引用,要么重写hashcode及equals方法,如两个学生对象,你可以重写认为只要名字相同就是同一对象
5、因此排序时才能够按照你预想的思路去实现个人的一点鄙见