Existe um bug no Iterator do java.util.Stack?

Hoje eu estava tentando empurrarjava.util.Stack classe e, em seguida, usar oIterator para iterar (sem usar pop) através dos itens. Eu estava esperando propriedade LIFO mas fiquei surpreso.

Aqui está o código que eu estava tentando.

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 + " ");
    }

}

A saída do programa acima é dada abaixo:

Algo Stack: 3 2 1 0 
Java Stack: 0 1 2 3 

No código acimajstack usa a implementação Java padrão erstack usa oimplementação fornecida por Robert Sedgewick para sua aula de Algoritmo. Descobri que a implementação do Prof. Robert funciona bem, mas ojava.util.Stack a implementação falha.

É umerro ou é pordesenhar?

questionAnswers(6)

yourAnswerToTheQuestion