如何从queue
中的java(not priority queue)
删除特定元素。没有删除queue.remove(object)
的功能。请帮助我。
Queue<String> queue = new LinkedList<>();
queue.add("hello");
queue.add("world");
queue.add("ranjeet");
我想删除&#34; world&#34;从它。
答案 0 :(得分:2)
队列接口只允许您从队列头部删除元素。 请参阅以下API的说明:
https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html#remove()
队列数据结构的全部目的是将项目推送到尾部并将其从头部移除(作为真正的队列工作)。
您应该使用不同的数据结构/集合对象类型。
另一种选择是删除队列中的所有项目并将它们放在另一个队列中(除了要删除的项目)。
最后,另一个是让你自己的队列实现添加额外的方法。
我的链表是一个实现Queue接口的实现,但它也实现了其他接口。
您可以使用以下方法:
删除(对象o) 删除指定元素的第一个匹配项 从此列表中,如果它存在。如果此列表不包含 元素,它没有变化。更正式地说,删除元素 最低指数i使得(o == null?get(i)== null:o.equals(get(i))) (如果存在这样的元素)。如果此列表包含,则返回true 指定的元素(或等效地,如果此列表更改为结果 电话)。
https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#remove(java.lang.Object)
您可以将代码更改为:
LinkedList<String> queue = new LinkedList<>();
OR
List<String> queue = new LinkedList<>();
主要问题是你为什么使用队列/链接列表? 似乎基本列表也适合您想要的内容。 如果要删除中间项,则链表不是最合适的。
实现List和Queue的两个接口。 见:
答案 1 :(得分:0)
正确。 Queue
没有删除特定对象的方法(在某个索引处,或者等于某些提供的参数):
队列通常(但不一定)以FIFO(先进先出)方式对元素进行排序。 ...无论使用什么顺序,队列的 head 是通过调用remove()或poll()来删除的元素。在FIFO队列中,所有新元素都插入队列的尾部。其他类型的队列可能使用不同的放置规则。每个Queue实现都必须指定其排序属性。
原因很简单:Queue
不是&#34;随机&#34;访问数据结构。它只支持从head resp中删除元素。尾巴;取决于实施。
从这个意义上说,答案就是:
请注意:您的代码显示了一个潜在的解决方案。只需将其更改为:
List<String> strings = new LinkedList<>();
突然间,您可以通过索引{&#34;按值&#34;来remove()
个对象。
据我所知, no 接口结合了两个接口(List和Queue)。但是,当然有一些实现,例如LinkedList
实际上就是这样做的。