与ArrayList
不同,get(int index)
中没有Queue
方法来检索指定位置的元素。
有人请告诉我如何在Queue
中实现这个目标吗?
感谢。
答案 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(先进先出),因此无法访问队列中的特定索引或元素。另一种方法是获取特定元素,除非您将其删除,否则直到删除它为止。