小编典典

java.util.Stack的Iterator中是否存在错误?

algorithm

今天,我试图java.util.Stack上课,然后使用Iterator来遍历项目(不使用pop)。我当时期待着LIFO的财产,但感到惊讶。

这是我正在尝试的代码。

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使用Robert
Sedgewick
为他的Algorithm类提供实现。我发现罗伯特教授的实施效果很好,但java.util.Stack实施失败。

bug 还是 设计使然


阅读 285

收藏
2020-07-28

共1个答案

小编典典

请参见Bug ID
4475301:RFE:java.util.Stack.iterator()迭代错误的方式
。此行为是由(不良)设计引起的。Java的内置Stack迭代器方法是从其他类继承的,因此它们的行为不符合您的预期。

2020-07-28