почему вывод отличается, когда метод push () используется в ArrayDeque и Stack? - PullRequest
0 голосов
/ 27 мая 2018

Я новичок в Java, изучая темы коллекций.Может кто-нибудь сообщить мне, почему выходные данные меняются, когда метод push используется в ArrayDeque и Stack?

Пример программы ArrayDeque:

public class Simple4 {

public static void main(String[] args) {
    // TODO Auto-generated method stub

ArrayDeque q = new ArrayDeque();

q.push("e");
q.push("f");

System.out.println(q);
}
}

Выход: [f, e]

Пример программы стека:

public class Simple5 {

public static void main(String[] args) {
    // TODO Auto-generated method stub

Stack s = new Stack();
s.push("apple");
s.push("banana");


System.out.println(s);
}
}

Вывод: [яблоко, банан]

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Не обманывайте себя, думая, что Stack.push и ArrayDeque.push имеют какое-либо отношение.Несмотря на то же имя и параметры, они не имеют ничего общего друг с другом.

Stack.push определено в классе Stack.

ArrayDeque.push реализует метод Deque.push.Но Stack не Deque - вы только надеваете вещи и снимаете вещи с одного конца, тогда как последовательность позволяет вам ставить и брать с обоих концов («De» означает «двусторонний»).

Поскольку они являются не связанными методами в несвязанных классах, вы не должны ожидать, что они будут делать то же самое.Они могут , конечно - вы должны проверить Javadoc, чтобы увидеть, каковы контракты классов - просто не следует ожидать, что они делают .

0 голосов
/ 27 мая 2018

Ваши примеры оба raw-типы.Не используйте raw-типы.Кроме того, ваш Stack использует формат вывода по умолчанию Collection - обратите внимание, что элементы идут в порядке FIFO (не LIFO).Чтобы правильно потреблять Stack, используйте pop().Как,

Stack<String> s = new Stack<>();
s.push("apple");
s.push("banana");
while (!s.isEmpty()) {
    System.out.println(s.pop());
}

Какие выходы (в LIFO), как

banana
apple
...