如何定义char堆栈?

Dmi*_*sev 16 java

如何在java中定义char堆栈?例如,要创建一个String堆栈,我可以使用这样的结构:

Stack <String> stack= new Stack <String> ();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将char放入String时我得到了一个错误:

Syntax error on token "char", Dimensions expected after this token
Run Code Online (Sandbox Code Playgroud)

Tud*_*dor 57

原始类型如char不能在Java中用作类型参数.您需要使用包装类型:

Stack<Character> stack = new Stack<Character>();
Run Code Online (Sandbox Code Playgroud)


phi*_*hag 12

char是Java中的原始数据类型之一,不能用于泛型.但是,您可以替换包装器java.lang.Character,如下所示:

Stack<Character> stack = new Stack<Character>();
Run Code Online (Sandbox Code Playgroud)

您可以将Character一个char或周围的其他方式; Java将为您自动提供价值.


Pet*_*rey 7

使用char集合效率很低.(但它的工作原理)你可以包装一个StringBuilder,它也是一个可变的char集合.

class CharStack {
    final StringBuilder sb = new StringBuilder();

    public void push(char ch) {
        sb.append(ch);
    }

    public char pop() {
        int last = sb.length() -1;
        char ch= sb.charAt(last);
        sb.setLength(last);
        return ch;
    }

    public int size() {
        return sb.length();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你有一个新的字符(~16个字节),你必须将它添加到一个堆栈(每个引用4个字节)它将比仅添加一个字符(2个字节)大得多,即使你有一个缓存的字符,它将是两倍大.堆栈也是线程安全的,这使它稍慢.您可以在StringBuilder中添加和删除char,而不会产生任何垃圾.(除非"堆叠"变得更长) (2认同)