为什么只用“ T”创建“结果”,而用“ {Queue<T>
”创建“ temp”,这有关系吗?
// returns the item at the front of the given queue,
without
// removing it from the queue
public static <T> T peek(Queue<T> q)
throws NoSuchElementException {
/** COMPLETE THIS METHOD **/
if (q.isEmpty()) {
throw new NoSuchElementException("Queue Empty");
}
T result = q.dequeue();
Queue<T> temp = new Queue<T>();
temp.enqueue(result);
while(!q.isEmpty()) {
temp.enqueue(q.dequeue());
}
while(!temp.isEmpty()) {
q.enqueue(temp.dequeue());
}
return result;
}
答案 0 :(得分:2)
result
和temp
的类型不同,因为它们表示不同类型的事物。让我们看一下这段代码:
T result = q.dequeue();
在这里,我们存储在result
中的东西是当您从队列q
中出队时会返回的任何类型的东西。那么q
存储什么类型的东西?查看参数,我们看到q
是Queue<T>
,这意味着队列中的每个元素都是T
类型。因此,我们需要给result
指定类型T
,因为它表示从队列中取出的单个元素。
另一方面,当我们写
Queue<T> temp = new Queue<T>();
目标是创建一个新的Queue
,它可以容纳T
类型的对象。为此,我们需要告诉Java我们希望它成为Queue<T>
。
这与我们声明result
时不同的原因是我们正在尝试做根本不同的事情。 result
旨在容纳单个项目,在这种情况下,其类型为T
。 temp
旨在存储项目的集合,因此我们将其设为Queue<T>
来表示它不仅是单个T
,而是它们的队列。
希望这会有所帮助!