内置的PriorityQueue remove()函数如何在java中找到需要删除的元素
删除方法:-内置的PriorityQueue remove()函数如何在java中找到需要删除的元素,java,data-structures,priority-queue,Java,Data Structures,Priority Queue,删除方法:- public remove():此方法从此队列中删除指定元素的单个实例(如果存在) 移除方法在O(1)中有效吗?如果是的话 它是如何找到特定元素的 由于优先级队列使用数组且未排序,因此我们无法使用二进制搜索,而线性搜索是一项代价高昂的操作 它是如何工作的 PriorityQueue<String> queue = new PriorityQueue<String>(); // Use add() method to add elements into t
public remove():此方法从此队列中删除指定元素的单个实例(如果存在) 移除方法在O(1)中有效吗?如果是的话 它是如何找到特定元素的 由于优先级队列使用数组且未排序,因此我们无法使用二进制搜索,而线性搜索是一项代价高昂的操作 它是如何工作的
PriorityQueue<String> queue = new PriorityQueue<String>();
// Use add() method to add elements into the Queue
queue.add("Welcome");
queue.add("To");
queue.add("Overflow");
queue.remove("To");
PriorityQueue queue=new PriorityQueue();
//使用add()方法将元素添加到队列中
添加(“欢迎”);
队列。添加(“至”);
添加(“溢出”);
排队。移除(“至”);
remove方法如何在priorityqueue数组{“Overflow”、“Welcome”、“To”}(非排序形式)中找到“To”否,删除特定元素的时间复杂度不是O(1),它被记录为O(N): 官方声明: 实现说明:此实现为排队和退队方法(offer、poll、remove()和add)提供了O(log(n))时间删除(对象)和包含(对象)方法的线性时间;以及检索方法(peek、元素和大小)的固定时间 (强调矿山) 因此,移除具有线性(即O(N))时间复杂性的特定元素 但是,还有一个始终移除队列头的,是O(1)
它使用
indexOf(Object)
,然后只对包含元素的内部数组执行线性搜索。它使用String类的equals和hashCode方法来比较您给它的内容,并查找是否有匹配的内容。正常情况下,仅使用hashcode就足够了,但有时,大多数情况下,字符串可能会在其hash值上发生冲突,因此还需要使用equals来找到正确的值。编辑:查看代码,PriorityQueue似乎只使用equals。我想知道如何实现查找函数linearIt搜索整个队列,并对队列的每个元素执行equals比较。如果找到,则停止搜索,然后根据找到元素的位置移动元素。它是线性的,因为它将从头开始并向前移动,直到找到它,所以更多的元素=更多的搜索时间。@缺少分号那么它不是一个常数时间函数,但在文档中它声明它是一个常数时间函数,它在哪里说的?它清楚地说明了它的线性时间@Hulk已经粘贴了PriorityQueueya文档的链接,但没有正确阅读,这是一种线性时间方法