集合之HashSet

HashSet
一、集合的体系:
—| Collection 单列集合的根接口
——| List 如果是实现了List接口的集合类,具备的特点: 有序,可重复。
———| ArrayList ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
———| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
———| Vector(了解即可) 底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。
——| Set 如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
———| HashSet 底层是使用了哈希表来支持的,特点: 存取速度快。
———| TreeSet

二、HashSet特点:

三、存在问题(添加引用类型对象时):

四、hashSet的实现原理:

往Hashset添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值,然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置。

1、如果算出元素存储的位置目前没有任何元素存储,那么该元素可以直接存储到该位置上。

2、如果算出该元素的存储位置目前已经存在有其他的元素了,那么会调用该元素的equals方法与该位置的元素再比较一次,如果equals返回的是true,那么该元素与这个位置上的元素就视为重复元素,不允许添加,如果equals方法返回的是false,那么该元素运行添加。
哈希表有这样一个特点:桶式结构,即一个存储位置可以存储多个元素,像桶一样。

分析:根据HashSet的特点,通过哈希值来进行位置存储,首先添加一个元素,这个元素一定会有一个专属的hashCode,所以如果想要做到id相同就是视为重复元素,就要重写hashCode()方法,再其次桶式结构,一个位置可以存储多个元素,所以要重写equals()方法,才能保证不存在我们所要求的重复元素。

3、hashCode()、equals()方法调用次数:

五、附加一个重点:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值