Java栈大小不返回栈中的项数

问题描述 投票:0回答:3

我是数据结构和编程的新手,我正在通过实现字符串反向器来学习堆栈的概念。因为我想使用堆栈大小作为计数器来弹出堆栈中的所有项目,我注意到堆栈大小不会返回堆栈中的项目数。例子:

    public String reverse(String string) {
    StringBuffer stringBuffer = new StringBuffer();
    //Use a stack to reverse this string.As a stack is a LIFO collection, it goes by last in first out.
   
    Stack<Character> characters = new Stack<>();
    char[] characterArray = string.toCharArray();
    for(char ch : characterArray) {
        characters.push(ch);
    }
    for(int i=0; i < characterArray.length; i++) {
        stringBuffer.append(characters.pop());
    }
    return stringBuffer.toString();
  

}

输入“helloworldz”按预期返回“zdlrowolleh”。但是当使用堆栈大小作为计数器时......

    public String reverse(String string) {
    StringBuffer stringBuffer = new StringBuffer();
    Stack<Character> characters = new Stack<>();
    char[] characterArray = string.toCharArray();
    for(char ch : characterArray) {
        characters.push(ch);
    }
    for(int i=0; i < characters.size(); i++) {
        stringBuffer.append(characters.pop());
    }
    return stringBuffer.toString();

}

它返回“zdlrow”,

意味着堆栈大小没有返回堆栈中的项目数。 我错过了什么重要的东西吗?任何帮助将不胜感激。

java data-structures stack size
3个回答
2
投票

堆栈的大小随着每次

1
操作而减少
pop
,因此在下面的代码块中,

for(int i=0; i < characters.size(); i++) {
    stringBuffer.append(characters.pop());
}

与下面的代码块相比,循环将只执行一半的次数

for(int i=0; i < characterArray.length; i++) {
    stringBuffer.append(characters.pop());
}

1
投票

如果您想根据

characters
堆栈本身的信息进行循环,正确的选择是:

    while (!characters.isEmpty()) {
        stringBuffer.append(characters.pop());
    }

0
投票

Java 提供了 Iterator 接口,用于迭代复杂的数据结构,如堆栈、映射和列表。 您可能必须重构代码才能使用迭代器接口。

Iterator<Character> iterator = stack.iterator();
while(iterator.hasNext()){
sb.append(stack.pop());
}
© www.soinside.com 2019 - 2024. All rights reserved.