Set的元素重复是怎么判断的
答案:2 悬赏:0 手机版
解决时间 2021-01-27 17:54
- 提问者网友:低吟詩仙的傷
- 2021-01-27 10:19
Set的元素重复是怎么判断的
最佳答案
- 五星知识达人网友:孤独的牧羊人
- 2021-01-27 10:36
你好,首先要明白一点:加入Set里面的元素必须定义equals()方法以确保对象的唯一性。 第一个问题: TreeSet的底层实现是采用红-黑树的数据结构,采用这种结构可以从Set中获取有序的序列,但是前提条件是:元素必须实现Comparable接口
全部回答
- 1楼网友:我住北渡口
- 2021-01-27 11:35
你好,首先要明白一点:加入set里面的元素必须定义equals()方法以确保对象的唯一性。
第一个问题:
treeset的底层实现是采用红-黑树的数据结构,采用这种结构可以从set中获取有序的序列,但是前提条件是:元素必须实现comparable接口,该接口中只用一个方法,就是compareto()方法。当往set中插入一个新的元素的时候,首先会遍历set中已经存在的元素(当然不是采用顺序遍历,具体采用什么方法,建议自己去看看源码),并调用compareto()方法,根据返回的结果,决定插入位置。进而也就保证了元素的顺序。
第二个问题:
上面已经说过,加入set里面的元素必须定义自己的equals()方法,但是对于良好的设计风格,最好在覆盖equals()方法的同时,也覆盖hashcode()方法,当然,对于treeset而言不用覆盖hashcode()方法也可。请记住:覆盖hashcode()方法的目的,只有一个原因就是提高效率。
在往set中插入新的对象时,首先会用该对象的hashcode()与已经存在对象的hashcode()做比较,如果相等,那就不能插入,如果不等,才会调用equals()方法,如果equals结果为true,说明已经存在,就不能再插入,如果为false,可以插入。
注:如果没有覆盖hashcode()方法,那就是只比较equals().对两个对象equals运算,是判断两个对象是否相等的关键。
第三个问题:
2)hashset与treeset区别:
1、treeset 是二差树实现的,treeset中的数据是自动排好序的,不允许放入null值
2、hashset 是哈希表实现的,hashset中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束
3、hashset要求放入的对象必须实现hashcode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的string对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯