coding喵的gravatar头像
coding喵 2019-01-24 21:14:12

Set里的元素是不能重复的,那么用什么方法来区分重复与否?

一个非常常见的面试题:Set里的元素是不能重复的,那么用什么方法来区分重复与否?

网上统一的答案是:

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
    equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

 

可我老感觉这答案有点答非所问,而且读这个答案读不顺,质疑的不是我一个人:https://bbs.csdn.net/topics/390390912?list=lz

所以想请各位大神用自己的话来回答这个问题:Set里的元素是不能重复的,那么用什么方法来区分重复与否?

 

 

所有回答列表(4)
xfxwanzd的gravatar头像
xfxwanzd  LV4 2019年1月25日

HashSet的内部其实是HashMap,HashMap的key是不重复的.set在add的时候调用的是map的put方法.put的时候比较的是对象的hashCode.

至于怎么比较的,转换为hash值之后,hash是int,迭代比较的hash值用的==.同时用==和equals比较了对象,

丶附耳聆听的gravatar头像
丶附耳聆听  LV21 2019年1月28日

里面有维护一个hash表,先会更具hashcode去比较如果一样就会再用equals去比较,如果都一样表示他们是同一个。否则反之!

Ares_xue的gravatar头像
Ares_xue  LV6 2019年1月30日

用equals方法去比较,equals不重写的话是比较的hashcode,hashCode不重写的话默认是内存地址。

宾克斯的美酒的gravatar头像
宾克斯的美酒  LV10 2019年2月12日

Set 里的元素是不能重复的,元素重复与否是使用 equals()方法进行判断的。
equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个
分离的对象的内容和类型相配的话,返回真值。

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友