Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内置的PriorityQueue remove()函数如何在java中找到需要删除的元素_Java_Data Structures_Priority Queue - Fatal编程技术网

内置的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文档的链接,但没有正确阅读,这是一种线性时间方法