追加成功后推出循环,为什么不为进入e!= null
时间: 2024-03-24 14:37:14 浏览: 14
根据您提供的信息,我假设您在使用一个类似于以下代码的循环:
```
while (e != null) {
// 进行某些操作
if (appendSuccessful) {
break;
}
e = e.next;
}
```
在这个循环中,如果追加元素成功,将会执行 `if (appendSuccessful) { break; }` 语句来跳出循环。
您的问题是,如果追加成功后,为什么 `e != null` 条件仍然不满足?
这是因为在追加成功之前,循环已经至少执行了一次。在这一次循环中,`e` 变量被赋值为了某个元素的 `next` 属性。即使在追加成功后,`e` 变量的值不会立即发生改变。只有在下一次循环中,`e` 变量才会被更新为新追加的元素的 `next` 属性。
因此,即使添加成功,循环仍然会继续执行一次,直到 `e` 变量被更新。然后,在下一次循环中,`e` 将会被更新为 `null`,从而退出循环。
相关问题
Hashset 中追加元素的table的对应索引位置已经是一个链表,追加成功后,退出循环,为什么不进去e!=null
在Hashset中追加元素时,如果对应索引位置已经有一个链表,那么新的元素将被添加到链表的末尾。在循环中,当程序找到对应的链表时,它会遍历链表中的每个元素,直到找到一个空的节点为止。因此,在找到空节点之后,程序会退出循环,而不是继续遍历链表。在这种情况下,e变量仍然为null,因为它没有被设置为链表中的任何元素。因此,程序不会进入if(e != null)代码块。
Hashset中在索引位置相同并已经是链表的末尾追加元素成功,为什么e!=null不成立
在 HashSet 中,如果一个哈希槽中已经有一个链表存在,并且要往该链表的末尾添加一个新的元素,那么在添加之前需要先判断该链表的最后一个元素的 next 节点是否为 null,如果为 null,则可以直接将新元素添加到链表的末尾。这是因为在 HashSet 内部的实现中,每个链表的末尾都会有一个 null 节点,用来表示该链表已经到达了尾部。
因此,当您在向一个已经是链表末尾的哈希槽中添加元素时,判断 e!=null 不成立的原因是因为 e 已经是该链表的最后一个元素,它的 next 节点已经是 null 了。
需要注意的是,如果您在向一个已经是链表末尾的哈希槽中添加元素时,发现 e 不为 null,那么可能是因为在多线程情况下,另外一个线程已经在同时向该链表中添加元素了,所以在添加之前需要做好同步措施。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)