Java-初探HashSet

1.HashSet

1.1 HashSet的底层数据结构
  • HashSet的底层是使用哈希表的存储机制
1.2 HashSet的结构描述

HashSet底层是一个哈希表,而哈希表顾名思义就是一个表格,里面的每一个单元格都是一个桶式结构,存放的数据没有顺序可言,且存放的数据的数量也没有明确的限制。每一个单元格都有一个唯一的位置索引,但是需要通过计算来得到数据所应该存储的位置。这里需要通过hashSet()方法,得到每个对象的哈希值,并且按照哈希表的存储原理,从而计算得出当前元素保存的位置在哪一个单元格。

1.3 存储流程

在这里插入图片描述

  1. 首先会调用对象的hashCode()方法获取要存储的对象的哈希值。
  2. 通过哈希值的计算得出该元素在哈希表中存储所对应的单元格。
  3. 因为在哈希表中的每一个单元格都是一个桶式结构,存放的数据没有明确的数量限制,所以需要判断该单元格内是否还有其它的元素存在,若没有其他的元素存在,则可以直接存储在该单元格内。
  4. 若该单元格内有其他的元素已经存在,则需要跟当前单元格内的所以元素进行比较,首先比较各自的哈希值是否相同,若都不相同,则直接存放在该单元格内。
  5. 若单元格内有其他元素的哈希值与其相同,则会调用equals()方法比较对象内容是否相等,若对象内容不相等,则可以直接存放。
  6. 若equals()方法比较对象内容相等,说明元素已经重复,不会存储到哈希表中,返回一个false。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值