【问题标题】:How to get true LIFO order, out of the stack?如何从堆栈中获得真正的 LIFO 订单?
【发布时间】:2020-03-23 18:42:57
【问题描述】:

如何添加 int 值,然后遍历堆栈获取 LIFO 顺序?添加 7 和 1 会返回 7 和 1。

   public void calculate_10to99() {

    Stack romanNumeralsStack =  new Stack();
        romanNumeralsStack.add(7);
        romanNumeralsStack.add(1);

        Iterator value = romanNumeralsStack.iterator();

    while (value.hasNext()){
        System.out.println(value.next());
    }

【问题讨论】:

  • 使用Deque。具体来说,使用ArrayDeque阅读Stack Javadoc。它说(部分)Deque 接口及其实现提供了一组更完整和一致的 LIFO 堆栈操作,应该优先使用此类。
  • 如果需要先进先出顺序,为什么要使用堆栈?
  • 在问题的标题中,您提到了 LIFO,但在描述中您想要 FIFO。请清除问题。
  • 不要使用迭代器,只需使用 romanNumeralsStack.push() 而不是 add() 和 pop() 来删除,你应该得到 LIFO
  • @oxy_js 我认为 mat1 表示他期待 LIFO 订单但获得 FIFO 订单

标签: java stack lifo


【解决方案1】:

这样做:

public void calculate_10to99() {

    Stack<Integer> romanNumeralsStack =  new Stack<>();
        romanNumeralsStack.push(7);
        romanNumeralsStack.push(1);

    while (!romanNumeralsStack.empty()){
        System.out.println(romanNumeralsStack.pop());
    }
 }

iterator() 方法来自它的超类 Vector,只是按顺序返回所有元素,所以 iterator.next() 不会给你 LIFO

【讨论】:

  • romanNumeralsStack.pop() 返回什么类型的实例? System.out.println(romanNumeralsStack.pop()) 弹出并打印堆栈中的数字,但 int temp = romanNumeralsStack.pop() 不起作用,IntegerString 都不起作用。只有Object 有效。从堆栈中弹出什么类型的对象?
  • 对于返回类型,您需要将堆栈定义为 Stack romanNumeralsStack = new Stack();那么只有你可以使用 int tmp = romanNumeralsStack.pop()
【解决方案2】:

您将迭代器用作

Iterator value = romanNumeralsStack.iterator();

从堆栈中以随机顺序返回元素。

您应该使用另一种方法,例如。这将检查堆栈是否不为空,然后它会继续从顶部弹出元素,使其成为 LIFO。

public static void calculate_10to99() {

        Stack romanNumeralsStack = new Stack();
        romanNumeralsStack.add(7);
        romanNumeralsStack.add(1);

        while (!romanNumeralsStack.isEmpty()){
            System.out.println(romanNumeralsStack.pop());

        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多