从Java LinkedList中有效地删除项目

Pet*_*ter 1 java linked-list

这是我用来从链表中删除项目的伪代码:

public static void removeByID(LinkedList<Fruit> fruits, int fruitID) {
    for(Fruit f : fruits) {
      if (f.ID == fruitID) {
         fruits.remove(f);
         return;
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这不是非常有效,因为fruits.remove()将再次遍历列表.想知道是否有更好的方法来实现这一目标.

Rad*_*def 5

对于a java.util.LinkedList,请使用Iterator.

Iterator<Fruit> it = fruits.iterator();
while(it.hasNext()) {
    if(it.next().ID == fruitID) {
        it.remove();
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将导致只进行一次遍历.返回的Iterator可以访问底层链接结构,并且无需迭代即可执行删除.

当您使用for-each循环表单时,无论如何都会隐式使用Iterator.您只需保留对它的引用,以便您可以使用它的功能.

您也可以使用listIteratorO(n)插入.