Today I was trying to push in java.util.Stack
class and then use the Iterator
to iterate (without using pop) through the items. I was expecting LIFO property but got surprised.
Here is the code that I was trying.
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 + " ");
}
}
The output the above program is given below:
Algo Stack: 3 2 1 0
Java Stack: 0 1 2 3
In the above code jstack
uses the default Java implementation and rstack
uses the implementation provided by Robert Sedgewick for his Algorithm class. I found that Prof. Robert's implementation works fine but the java.util.Stack
implementation fails.
Is it a bug or is it by design?
See Bug ID 4475301 : RFE: java.util.Stack.iterator() iterates the wrong way. This behavior is by (bad) design. Java's built-in Stack
iterator methods are inherited from other classes, so they don't behave as you'd expect.