如何从队列中获取特定元素?

时间:2014-03-17 12:01:26

标签: java collections

ArrayList不同,get(int index)中没有Queue方法来检索指定位置的元素。

有人请告诉我如何在Queue中实现这个目标吗?

感谢。

7 个答案:

答案 0 :(得分:7)

按索引访问元素不是队列概念的一部分。

如果需要按索引访问元素,则需要列表,而不是队列。

答案 1 :(得分:3)

您可以从队列中删除元素,直到找到所需的元素。您可以在队列末尾重新添加已删除的元素,或将它们放在不同的队列中(并在到达所需元素后添加其余元素)。

你真的不应该像这样使用队列!

public static <T> T get(Queue<T> queue, int index) {
    synchronized (queue) {
        if (queue == null) {
            return null;
        }

        int size = queue.size();
        if (index < 0 || size < index + 1) {
            return null;
        }

        T element = null;
        for (int i = 0; i < size; i++) {
            if (i == index) {
                element = queue.remove();
            } else {
                queue.add(queue.remove());
            }
        }

        return element;     
    }
}

答案 2 :(得分:2)

public static Object retrieveElement(int index, Queue q) {
    Iterator it = q.iterator();
    int count = 0;
    while (it.hasNext()) {
        Object e = it.next();
        if (count == index) {
            it.remove();
            return e;
        }
        count++;
    }
    return null;
}

答案 3 :(得分:1)

public static <T> T getFromQueue(Queue<T> queue, int index){
    if(index>=queue.size()){
        throw new IndexOutOfBoundsException("index="+index+",size="+queue.size());
    }
    Queue<T> queueCopy = new LinkedList<T>(queue);
    for(int i=0; i<index; i++){
        queueCopy.remove();
    }
    return queueCopy.peek();
}

答案 4 :(得分:0)

private static  List<Individual> queueToList(Queue<Individual> archive) {
      List<Individual> list = new LinkedList<Individual>();
      Iterator<Individual> it = archive.iterator();
      while(it.hasNext()){
         list.add(it.next());
      }
    return list;
}

答案 5 :(得分:0)

队列以先进先出(FIFO)方式运行,因此为了访问特定元素,必须删除元素并将其存储在辅助队列中,直到识别出被搜索的元素为止

答案 6 :(得分:0)

队列的基本概念是FIFO(先进先出),因此无法访问队列中的特定索引或元素。另一种方法是获取特定元素,除非您将其删除,否则直到删除它为止。