JAVA集合之---TreeSet、HashSet、EnumSet

3 篇文章 0 订阅

TreeSet:

TreeSet集合开发中没怎么用到。此处既然学习到了就记录下来一遍大家一起学习讨论。

首先TreeSet集合是Set接口的实现类。TreeSet集合的元素不能重复。

需要加入TreeSet集合的类必须实现Comparable接口并重写compareTo方法,否则回报ClassCastException

TreeSet中加入的对象,如果equals和compareTo方法都判断为同一个对象的话,只会存储一个元素。重复的元素不会存储,而且不会报错。


因为TreeSet中的元素默认会对元素进行排序
所以TreeSet在添加元素的时候会做相应的的处理

TreeSet集合的排序方式有两种:自然排序,定制排序

自然排序:集合元素对象的实现类需要实现Comparable接口,并重写compareTo方法。默认是升序的。

定制排序:创建TreeSet对象时,提供Comparator对象与TreeSet集合关联。有Comparator负责元素排序。

============================================================

由于TreeSet集合元素是不可重复的,当equals返回true,compareTo方法返回0时。是不会添加进集合的。

注意:equals方法和compareTo方法的返回结果必须一致!即equals方法返回true,compareTo方法返回 0 ,否则会出现一下这种混乱的情况

当equals返回false,comparaTo方法返回0时,TreeSet分配两个不同的地址存放该对象。

当equals返回true,comparaTo方法返回1时,TreeSet会将两个对象保存在一个位置。

当存入TreeSet集合中的对象是可变对象的时候,如果可变对象发生改变,会产生混乱的情况,比如删除元素删除掉之类的。所以强烈推荐HashSet和TreeSet中的元素传入不可变对象,来确保不出意外!

hashSet
而hashSet总是比treeSet在性能方面优越(特别是最常用的添加,查询等操作),因为TreeSet需要使用红黑树算法来维护元素的次序。

所以当不需要对元素进行排序的时候应选用hashSet集合。

还有Set集合的三个实现类:hashSet、TreeSet、和EnumSet都不是线程安全的,所以当多个线程需要访问集合的时候,需要手动加锁。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值