Почему эти переменные имеют разные типы в этом универсальном методе? - PullRequest
0 голосов
/ 24 июня 2019

Почему «результат» создается просто с «T», а «temp» создается с «Queue<T>», имеет ли это значение?

// 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;
     }

1 Ответ

2 голосов
/ 24 июня 2019

Типы 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, а скорее их очередь.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...