java实现set接口_java Set接口实现类

Set集合:(唯一)

1.特点:存入顺序和取出顺序不一致,不保证顺序不变,且元素唯一,底层由HashMap实现

2.HashSet

底层为哈希表----HashMap---唯一

HashSet为什么唯一呢?

依赖hashCode和equals方法来判断两个元素是否一样,

比如在判断时:hashCode值不一样---------->元素直接添加

hashCode值一样------>在判断地址值和equals是否一样(两个有一个一样就ok)--->也一样---  ----->不添加

简单来说:hashCode不一样:直接添加

hashCode一样,equals不一样:直接添加

hashCode一样,equals也一样:不添加(此时说明是重复元素)

说明:LinkedHashSet : HashSet的一个子类,可预知的迭代顺序,存储和取出顺序一致,数据结构由哈希表和链表实现,保证唯一性和有序性。

3.TreeSet

底层为TreeMap(红黑树)----唯一且能够根据某种排序规则进行排序,而比较是依赖于compareTo方法,方法在comparable接口内,需要排序的类要实现该接口。

排序:由构造方法来决定使用哪一种比较方法

(1)自然排序(元素具备):对象所属类实现了自然排序接口comparable,重写compareTo比较方法。

TreeSet()

(2)比较器排序(集合具备):

TreeSet(Comparator  comparator) , 构造里面传一个Comparator比较器接口的实现类

而在comparator对象的类实现了Comparator接口,也实现了比较的方法compare,传入两个待比较对象,写出比较逻辑,不过此处也可以不写Comparator的实现类,直接用匿名内部类来实现,重写比较方法compare即可。

TreeSet存储自定义对象并保证排序和唯一,因为排序依赖于comparable接口内的compareTo方法,并且在底层调用的时候,会把自定义类转换为comparable类,(向上转型,多态),如果自定义的类没有实现该接口,则会报错。comparableException。compareTo返回0表示相等,大于0表示大于被比较对象。

那么:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值