HashSet的底层原理是什么?
时间: 2023-03-27 15:01:58 浏览: 122
HashSet的底层原理是基于HashMap实现的,它是一种无序、不重复的集合。HashSet内部维护了一个HashMap,将所有元素都存储在HashMap的key中,value则是一个固定的Object对象。当我们向HashSet中添加元素时,HashSet会将元素作为key存储到HashMap中,value则是一个固定的Object对象。当我们需要判断一个元素是否存在时,HashSet会将元素作为key去HashMap中查找,如果找到了对应的key,则说明元素已经存在于HashSet中。
相关问题
HashSet底层原理
HashSet底层原理是基于哈希表实现的,它使用哈希函数将元素映射到哈希表中的桶中,然后在桶中查找元素。如果桶中已经存在元素,则使用链表或红黑树来解决哈希冲突。HashSet的主要特点是元素无序且不可重复。
hashset底层原理
HashSet底层实际上是一个HashMap容器,其中的元素是存储在HashMap的key中的,而value则是一个固定的Object对象。当我们向HashSet中添加元素时,HashSet会首先调用元素所在类的hashCode()方法,计算出元素的哈希值。然后根据这个哈希值,通过算法计算出元素在HashSet底层数组中的存放位置。在此位置上,HashSet会判断是否已经存在元素。如果存在,则判断两个元素是否相等,如果相等,则不添加;如果不相等,则采用链表的方式将该元素添加到链表的末尾。如果该位置上不存在元素,则直接将元素添加到该位置上。
举个例子来说明,假设我们向一个空的HashSet中添加两个Person对象p1和p2,它们的哈希值分别为h1和h2。根据算法计算出的位置分别为pos1和pos2。由于HashSet为空,所以直接将p1和p2添加到pos1和pos2的位置上。此时HashSet中的元素为[p1, p2]。当我们修改p1的name属性为"CC"后,再尝试移除p1。HashSet会再次计算p1的哈希值,得到新的位置pos3。由于pos3上已经存在元素p2,所以HashSet会遍历链表,判断是否有相等的元素。由于p1的name属性被修改为"CC",与原来的"AA"不相等,所以p1会被移除。最终HashSet中的元素为[p2]。
阅读全文