Java-初探HashSet
1.HashSet
1.1 HashSet的底层数据结构
- HashSet的底层是使用哈希表的存储机制
1.2 HashSet的结构描述
HashSet底层是一个哈希表,而哈希表顾名思义就是一个表格,里面的每一个单元格都是一个桶式结构,存放的数据没有顺序可言,且存放的数据的数量也没有明确的限制。每一个单元格都有一个唯一的位置索引,但是需要通过计算来得到数据所应该存储的位置。这里需要通过hashSet()方法,得到每个对象的哈希值,并且按照哈希表的存储原理,从而计算得出当前元素保存的位置在哪一个单元格。
1.3 存储流程
- 首先会调用对象的hashCode()方法获取要存储的对象的哈希值。
- 通过哈希值的计算得出该元素在哈希表中存储所对应的单元格。
- 因为在哈希表中的每一个单元格都是一个桶式结构,存放的数据没有明确的数量限制,所以需要判断该单元格内是否还有其它的元素存在,若没有其他的元素存在,则可以直接存储在该单元格内。
- 若该单元格内有其他的元素已经存在,则需要跟当前单元格内的所以元素进行比较,首先比较各自的哈希值是否相同,若都不相同,则直接存放在该单元格内。
- 若单元格内有其他元素的哈希值与其相同,则会调用equals()方法比较对象内容是否相等,若对象内容不相等,则可以直接存放。
- 若equals()方法比较对象内容相等,说明元素已经重复,不会存储到哈希表中,返回一个false。