我有一个linkedlist实现为队列。remove(object)方法可以在队列的任何位置删除对象,据我所知,这与队列的fifo概念相矛盾。我的理解错了。
Queue<Object> q= new LinkedList<>();
//assuming objects have been inserted
q.remove(a); //this removes the object 'a' present anywhere in the Queue.
我有一个linkedlist实现为队列。remove(object)方法可以在队列的任何位置删除对象,据我所知,这与队列的fifo概念相矛盾。我的理解错了。
Queue<Object> q= new LinkedList<>();
//assuming objects have been inserted
q.remove(a); //this removes the object 'a' present anywhere in the Queue.
1条答案
按热度按时间thigvfpy1#
出于好奇,我研究了linkedlist对象和集合接口中的remove方法。remove函数的作用是遍历节点,找到对象,然后取消对象的链接。
现在,unlink方法基本上是和一个节点一起工作的,就像queue一样,通过左、右迭代来找到那个对象。另外,请记住,这个对象有一个modcount,它跟踪修改并实现快速失败行为(如果出现错误)
不是一个完整的答案,但是,你可以看到,它穿越节点。也许你可以通过书籍和教程来研究big o和算法。然而,简单地说,linkedlist是一种混合包,在这里和那里实现。所以,fifo将被保持,索引将被保持跟踪,但是,将遍历做删除以外的切割头或尾节点。