Hashset中在索引位置相同并已经是链表的末尾追加元素成功,为什么e!=null不成立
时间: 2024-04-01 16:31:37 浏览: 18
在 HashSet 中,如果一个哈希槽中已经有一个链表存在,并且要往该链表的末尾添加一个新的元素,那么在添加之前需要先判断该链表的最后一个元素的 next 节点是否为 null,如果为 null,则可以直接将新元素添加到链表的末尾。这是因为在 HashSet 内部的实现中,每个链表的末尾都会有一个 null 节点,用来表示该链表已经到达了尾部。
因此,当您在向一个已经是链表末尾的哈希槽中添加元素时,判断 e!=null 不成立的原因是因为 e 已经是该链表的最后一个元素,它的 next 节点已经是 null 了。
需要注意的是,如果您在向一个已经是链表末尾的哈希槽中添加元素时,发现 e 不为 null,那么可能是因为在多线程情况下,另外一个线程已经在同时向该链表中添加元素了,所以在添加之前需要做好同步措施。
相关问题
Hashset 中追加元素的table的对应索引位置已经是一个链表,追加成功后,退出循环,为什么不进去e!=null
在Hashset中追加元素时,如果对应索引位置已经有一个链表,那么新的元素将被添加到链表的末尾。在循环中,当程序找到对应的链表时,它会遍历链表中的每个元素,直到找到一个空的节点为止。因此,在找到空节点之后,程序会退出循环,而不是继续遍历链表。在这种情况下,e变量仍然为null,因为它没有被设置为链表中的任何元素。因此,程序不会进入if(e != null)代码块。
为什么hashset是无索引的但是哈希表底层是数组数组有索引
哈希表底层是数组,但是哈希表的索引是通过哈希函数计算得出的,而不是数组的下标。哈希函数将键映射到数组的特定位置,这个位置就是哈希表中的索引。因此,哈希表中的元素是无序的,而且没有索引。而hashset是一种特殊的哈希表,它只存储键而不存储值,因此它也没有索引。