Сегодня я пытался нажать java.util.Stack
класс, а затем использовать Iterator
для итерации (без использования pop) через предметы. Я ожидал собственности LIFO, но удивился.Есть ли ошибка в java.util.Stack's Iterator?
Вот код, который я пытался.
import java.util.*;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
RobStack<Integer> rstack = new RobStack<Integer>(); // Correct Implementation
Stack<Integer> jstack = new Stack<Integer>(); // Default Java Implementation
rstack.push(0); jstack.push(0);
rstack.push(1); jstack.push(1);
rstack.push(2); jstack.push(2);
rstack.push(3); jstack.push(3);
System.out.print("Algo Stack: ");
for (int i : rstack)
System.out.print(i + " ");
System.out.print("\nJava Stack: ");
for (int i : jstack)
System.out.print(i + " ");
}
}
Выход выше программы приведен ниже:
Algo Stack: 3 2 1 0
Java Stack: 0 1 2 3
В приведенном выше коде jstack
использует реализацию Java по умолчанию и rstack
использует implementation provided by Robert Sedgewick для своего класса алгоритма. Я обнаружил, что реализация профессора Роберта работает нормально, но реализация java.util.Stack
не выполняется.
Это ошибка или это дизайн?
Примечание: 'Stack' является устаревшим, вы должны использовать' Deque' вместо (например, символом 'ArrayDeque' – fge
А что, если вы используете поп() операцию – jtomaszk
В поддержку комментариев FGE, в самом док? класса [Stack] (http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html): 'Более полный и согласованный набор операций стека LIFO обеспечивается интерфейсом Deque и его реализации, которые следует использовать в предпочтении этому классу. ' – nhahtdh