java集合框架之Set集合实现类性能对比

1.Set接口的实现类

共同的特点:
     1):都不允许元素重复.
     2):都不是线程安全的类.
     解决方案:Set s = Collections.synchronizedSet(Set对象);
-----------------------------------------------------------------------------------------
HashSet: 不保证元素的先后添加顺序.
                 底层采用的是哈希表算法,查询效率极高.
                 判断两个对象是否相等的规则:
                                                       1):equals比较为true.
                                                       2):hashCode值相同.

                 要求:要求存在在哈希中的对象元素都得覆盖equals和hashCode方法.


LinkedHashSet:
                HashSet的子类,底层也采用的是哈希表算法,但是也使用了链表算法来维持元素的先后添加顺序.
                判断两个对象是否相等的规则和HashSet相同.
                因为需要多使用一个链表俩记录元素的顺序,所以性能相对于HashSet较低.

                一般少用, 如果要求一个集合既要保证元素不重复,也需要记录添加先后顺序,才选择使用LinkedHashSet.


TreeSet:不保证元素的先后添加顺序,但是会对集合中的元素做排序操作.
              底层采用红黑树算法(树结构,比较擅长做范围查询).
              TreeSet要么采用自然排序,要么定制排序.
              自然排序:  要求在TreeSet集合中的对象必须实现java.lang.Comparable接口,并覆盖compareTo方法.
              定制排序:  要求在构建TreeSet对象的时候,传入一个比较器对象(必须实现java.lang.Comparator接口).
                                在比较器中覆盖compare方法,并编写比较规则.

              TreeSet判断元素对象重复的规则:
                                         compareTo/compare方法是否返回0.如果返回0,则视为是同一个对象.

-----------------------------------------------------------------------------
HashSet做等值查询效率高,TreeSet做范围查询效率高.

而我们更多的情况,都是做等值查询, 在数据库的索引中做范围查询较多,所以树结构主要用于做索引,用来提高查询效率.



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值