Java 如何删除队列中的第二个元素?

Java 如何删除队列中的第二个元素?,java,Java,我是数据结构的初学者,我正在尝试从队列中删除并返回一个特定的元素 我的想法是删除队列中的所有元素,直到到达该元素,然后只添加回我需要的特定元素 但是,我不确定在删除所有元素后如何添加回该元素。有人能解释一下你是如何做到这一点的吗 public static Object removesecond(Queue queue){ Queue q = new Queue(queue.size()); queue.remove(); // remove queue.remove()

我是数据结构的初学者,我正在尝试从队列中删除并返回一个特定的元素

我的想法是删除队列中的所有元素,直到到达该元素,然后只添加回我需要的特定元素

但是,我不确定在删除所有元素后如何添加回该元素。有人能解释一下你是如何做到这一点的吗

public static Object removesecond(Queue queue){
   Queue q = new Queue(queue.size());


   queue.remove(); // remove

   queue.remove();
   Object removed = queue.remove();
   // remove first 2 elements and store it in object



    queue = q;

    System.out.println(""+removed); 


     return 0;
}
你可以这样做(但实际上这是一个糟糕的做法)

Queue ad=new ArrayDeque();
ad.add(10);
ad.add(20);
ad.add(30);
迭代器a=ad.Iterator();
a、 next();
a、 next();
a、 删除();
系统输出打印项次(ad);

但是,队列是一种FIFO数据结构,用于按照元素添加的顺序删除元素。您可能需要使用不同的集合,如
列表
实现。

如果您需要这种行为,您需要的是实际上不是队列的东西,因为队列没有这种行为

你想过使用类似于
列表的东西吗

无论如何,由于您的
队列
似乎是一个自定义类,我假设您可以使用
size
方法来了解它包含多少对象(我在您的示例中看到了这一点),并使用
push
方法将元素放入队列中。在这种情况下,我们可以删除所有元素,并在继续时将它们放回原处,跳过第二个元素(并将其放在一边,以便在最后返回)


您必须将结构更改为列表,队列的原则是只删除头元素什么是
队列
?它当然不是来自标准库的(因为它是一个接口)。它有什么方法?无论如何,如果您需要这种行为,那么您正在寻找实际上不是队列的东西,因为队列没有这种行为。您是否想过使用简单数组之类的东西?要么这样,要么将所有内容(除了要删除的元素)移动到另一个队列中。@leobogod您是否尝试编译此代码?队列类在哪里定义?它是第二个元素还是任何元素?请相应地更新问题标题或内容。请注意,
Queue
似乎是一个自定义对象,可能不是
Iterable
。True。我假设它是JDK版本。他们正在实例化它,所以它不可能是(
Queue
是一个接口),然后提供的任何解决方案都不能确定它是否能工作,因为我们不知道方法或功能的名称。也没有人知道OP是否真的试图编译提供的代码。我怀疑它是否成功,因为它有太多的右括号。谢谢你的帮助,有没有办法返回那个特定的元素,或者你不能用队列来返回?正如我所指出的,你使用的不是我们都知道和喜欢的
队列
接口,而是其他东西,所以这取决于
队列
实际上是什么。只有您可以告诉我们。您将如何使用队列接口类来执行此操作?
Queue ad=new ArrayDeque()
public static Object removesecond(Queue queue){
    Object toReturn;
    for (int i = 0; i < queue.size(); i++) {
        Object o = queue.remove();
        if (i != 1) queue.push(o)
        else toReturn = o;
    }
    return toReturn;
}
public static Integer removesecond(ArrayDequeue<Integer> queue){
    Integer toReturn;
    Integer[] arr = queue.toArray(new Integer[0]);
    List<Integer> list = Arrays.asList(arr);
    toReturn = list.remove(list.size() - 2);
    queue.clear();
    queue.addAll(list);
    return toReturn;
}