Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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
如何在java中从队列中删除特定元素(不是优先级队列)_Java_Queue - Fatal编程技术网

如何在java中从队列中删除特定元素(不是优先级队列)

如何在java中从队列中删除特定元素(不是优先级队列),java,queue,Java,Queue,如何从java(非优先级队列)中的队列中删除特定元素。没有删除队列的功能。删除(对象)。请帮我做这件事 Queue<String> queue = new LinkedList<>(); queue.add("hello"); queue.add("world"); queue.add("ranjeet"); Queue Queue=newlinkedlist(); 添加(“你好”); 添加(“世界”); 添加(“ranjeet”); 我想从中删除“世界”。正确队列没

如何从
java(非优先级队列)
中的
队列
中删除特定元素。没有删除
队列的功能。删除(对象)
。请帮我做这件事

Queue<String> queue = new LinkedList<>();
queue.add("hello");
queue.add("world");
queue.add("ranjeet");
Queue Queue=newlinkedlist();
添加(“你好”);
添加(“世界”);
添加(“ranjeet”);

我想从中删除“世界”。

正确<代码>队列没有删除特定对象的方法(在特定索引处,或等于提供的某个参数):

队列通常(但不一定)以FIFO(先进先出)方式对元素进行排序。。。无论使用何种顺序,队列的就是通过调用remove()或poll()删除的元素。在FIFO队列中,所有新元素都插入队列的尾部。其他类型的队列可能使用不同的放置规则。每个队列实现都必须指定其排序属性

原因很简单:
Queue
不是“随机”访问数据结构。它仅支持从head resp中删除元素。尾巴;取决于实施情况

从这个意义上说,答案是:

  • 您必须“弹出”队列中的所有条目,直到要删除的条目,然后将它们添加回
  • 您可以将底层数据结构更改为允许“随机”删除操作的结构
请注意:您的代码显示了一个潜在的解决方案。只需将其更改为:

List<String> strings = new LinkedList<>();
List strings=newlinkedlist();
突然之间,您可以通过索引或“值”删除对象

据我所知,没有结合两个接口(列表和队列)的接口。当然,也有一些实现,比如
LinkedList
,实际上就是这样做的。

Queue Interface 队列接口仅允许您从队列头部删除元素。 有关API的说明,请参见:

队列数据结构的全部目的是将项目推到尾部,并将其从头部移除(因为真正的队列工作)

您应该使用不同的数据结构/集合对象类型

另一个选项是删除队列中的所有项目,并将它们放在另一个队列中(要删除的项目除外)

最后,另一种方法是创建自己的队列实现,添加额外的方法

链表 linkedlist是一个实现队列接口的实现,但它也实现了其他接口

您可以使用以下方法:

移除(对象o) 删除指定元素的第一个匹配项 从该列表中,如果存在。如果此列表不包含 元素,它是不变的。更正式地说,使用 最低索引i使得(o==null?get(i)==null:o.equals(get(i))) (如果存在此类元素)。如果此列表包含 指定的元素(或等效元素,如果此列表因此更改 电话号码)

您可以将代码更改为:

LinkedList<String> queue = new LinkedList<>();
LinkedList队列=新建LinkedList();

List queue=newlinkedlist();
为什么要使用队列/链接列表? 主要问题是为什么要使用队列/链接列表? 似乎一个基本的清单也适合你想要的东西。 如果要删除中间项,linkedlist不是最合适的

链表 实现列表和队列两个接口。 见:


您能否添加代码以显示问题所在并帮助您解决该队列。删除(“世界”);这一行对我有用。你能给我推荐一些其他的数据结构吗?这些数据结构类似于队列,并且能够使用对象引用删除元素。@GhostCat不完全正确。LinkedList实现了List和Queue两个接口。如果他只是替换变量定义,它就会工作<代码>LinkedList队列=新建LinkedList()我想你的意思是没有实现这两者的接口@鬼猫,看:是的,我正急忙把它写下来。改变和固定。顺便说一句,你得到了一个很好的答案————“幽灵猫”,谢谢你。你也是!那是你的真猫吗?看起来像俄罗斯蓝。看起来棒极了!对我的猫。但叫他俄罗斯蓝几乎让我想放弃对你答案的投票-他是一个。。。我必须链接到德国维基百科的文章——英文的那篇文章只显示了一张猫的照片,“很可能是俄罗斯蓝”。疯狂世界。实际上这只是代码的一部分。我必须在其他部分使用队列功能。这就是我使用队列的原因。@Ranjeet Kumar yadav,如果要删除中间元素,应该使用列表。但是,如果坚持使用队列,解决方案是在新队列中重新插入所有元素(不需要的元素除外)。见:
List<String> queue = new LinkedList<>();