当前位置: 首页 > 面试题库 >

LinkedList:删除对象

齐文栋
2023-03-14
问题内容

这是使用for每个循环从Java中的LinkedList中查找和删除项目的有效方法,是否可能会导致不一致:

for(ObjectType ob : obList) {
  if(ob.getId() == id) {
    obList.remove(ob);
    break;
   }
}

问题答案:

其他人提到有效点,通常这不是您如何remove从集合中获取对象。但是,在这种情况下,因为您break一旦退出循环就可以了remove

但是,如果要在之后继续迭代remove,则需要使用迭代器。否则,您将获得ConcurrentModificationException,或更普遍的情况是未定义的行为。

所以,是的, 如果您break不在别人foreach之后remove,您会没事的

对于那些说这将失败的人来说,因为您无法修改集合中的内容foreach-仅当您想保持迭代时,这才是正确的。这里不是这种情况,因此此快捷方式很好。

A
ConcurrentModificationException由迭代器检查并抛出。在此之后remove(称为并发修改),您将break退出循环。迭代器甚至没有机会检测到它。

最好在上添加注释break,为什么绝对必要等,因为 如果以后修改此代码以在a之后继续迭代remove,它将失败

我将这个习惯用法与goto(或更确切地说,标记为break/
continue)相似:起初看起来似乎是错误的,但是如果明智地使用它,则可以使代码更简洁。



 类似资料:
  • 我有以下型号: 当我运行下面的查询时,用户模型也被删除 有没有办法在不删除用户的情况下删除问题? 我试着重复这些问题但没有用 我认为查询集是懒惰的,所以也许我需要在删除之前评估它,所以我打印了它,但这不起作用。 我知道,将ForeignKey设置为null将为我提供诸如clear和remove之类的方法,但我不想这样做,因为我不希望出现任何孤立的用户问题。 我更新了ForeignKey,如下所示

  • 问题内容: 我知道这是一个杂乱的实现,但是我基本上有这段代码(我全部写了),使用适当的菜单选项时,我需要能够从列表中删除一名学生或教师。代码中的所有其他内容都起作用,但菜单选项3和4无效。我尝试删除该对象时输入的是完全相同的信息。这是代码。这三个类别都在下面。 驱动类别: 学生班: 讲师课程: 问题答案: 您必须正确覆盖和类的方法。 覆盖等于时,也应覆盖。新学生(姓名,ID,GPA); 例如,如下

  • type String - password。 origin String(可选) - 当提供时,与原始相关的认证信息将被删除,否则整个缓存会被清除。 scheme String(可选) - 认证方案。可选 basic, digest, ntlm, negotiate。如果通过 origin删除,必须提供。 realm String(可选) - 认证的领域。如果通过 origin删除,必须提供。

  • 本文向大家介绍从C#中的LinkedList中删除指定的节点?,包括了从C#中的LinkedList中删除指定的节点?的使用技巧和注意事项,需要的朋友参考一下 要从LinkedList中删除指定的节点,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-

  • 问题内容: 我对JavaScript的运算符有些困惑。采取以下代码: 执行完这段代码后,is ,但仍指与完全相同的对象。我猜这个对象是指向相同的对象。 这使我感到困惑,因为我希望写操作可以删除指向内存中的对象,而不仅仅是变量。 这是因为JavaScript的垃圾回收工作在保留/释放的基础,所以,如果我没有指向对象的任何其他变量,它 会 从内存中清除? (顺便说一下,我的测试是在Safari 4中完

  • 问题内容: 我对级联=“删除”的工作方式感到困惑。我在“城市”映射文件中以以下方式定义了映射: 类客户具有类城市的外键。 因此,当我运行时: 是否还应该删除所有客户端,还是必须以某种方式处理它?我是否将查询作为方法参数正确传递给会话的delete()方法?谢谢你的帮助。最好的问候,混蛋。 问题答案: 我对cascade =“ delete”的工作方式有些困惑(…) 级联操作意味着,如果您是父母,则