java 集合-001 Set

今天继续总结java常用集合Set

set集合是无序、不可重复的容器,set集合主要派生出来的常用的有 HashSet 、TreeSet、 LinkedHashSet

一、HashSet

HashSet是按照Hash算法来存储元素的,因此具有很好的存取和查找性能,HashSet是无序、不可重复的

HashSet具有以下特点

  • 不能保证元素的排列顺序
  • HashSet 不是线程同步的,如果多个线程访问同一个hashSet集合,有第二个线程对hashset进行了改变,必须通过代码来保证同步
  • 集合可以存储null元素

在这里我们既然说HashSet是不可重复的,我们就应该要知道是怎么保证数据部重复的,当向HashSet集合存入一个对象时,HashSet 会调用该对象的hashCode方法取得hashCode值然后决定它的存储位置。如果2个对象的hashCode值不一样,但是equals方法返回为true,它照样会把填加在不同的位置上。

所以HashSet判断2个对象相等:必须hashCode返回值一样,equals方法返回为true。


二、LinkedHashSet

LinkedHashSet是HashSet的子类,因为引用了链表结构所以是有序、不可重复的

LinkedHashSet具有以下特点

  • 能保证元素的排列顺序
  • 不是线程同步的
  • 集合可以存储null元素

LinkedHashSet判断2个对象相等:必须hashCode返回值一样、equals方法返回true。

LinkedHashSet相对HahsSet插入、删除的速度慢,因为需要维护链表的开销,但是在迭代遍历速度上面要快。


三、TreeSet

TreeSet是有序、不可重复的

TreeSet是采用红黑树的数据结构对元素进行排序,支持两种排序方法:自然排序和定制排序,默认自然排序。

判断2个对象相等:equals方法返回true,compareTo方法返回0。

 

HashSet和TreeSet是常用的2个set集合,到底什么时候选择使用哪个呢?

HashSet在插入和查询上面性能要比TreeSet 要好因为TreeSet需要额外的红黑树算法来进行排序,所以如果我们需要一个有序的set集合我们可以考虑使用TreeSet否则都应考虑使用HashSet。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值