这是我用来从链表中删除项目的伪代码:
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()将再次遍历列表.想知道是否有更好的方法来实现这一目标.
对于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)插入.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |