2012-01-05 12 views
15

Come definire un char stack in java? Ad esempio, per creare uno stack Stringa posso usare tale costruzione:Come definire una pila di caratteri?

Stack <String> stack= new Stack <String>(); 

Ma quando sto cerco di mettere char invece String ho ottenuto un errore:

Syntax error on token "char", Dimensions expected after this token 

risposta

7

L'utilizzo di una raccolta di char è piuttosto inefficiente. (ma funziona) Si può avvolgere un StringBuilder che è anche una collezione mutevole di 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(); 
    } 
} 
+0

Non sono sicuro del metodo .append(). Funziona davvero più velocemente dello stack? –

+2

Se si dispone di un nuovo carattere (~ 16 byte) e si deve aggiungerlo a uno stack (4 byte per riferimento) sarà molto più grande di un semplice carattere (2 byte) Anche se si dispone di un carattere memorizzato nella cache, essere due volte più grande Lo stack è anche thread-safe che lo rende leggermente più lento. È possibile aggiungere e rimuovere i caratteri in un oggetto StringBuilder senza creare elementi inutili. (A meno che lo "stack" si allunghi) –

+0

Grazie mille) Allora userò la tua soluzione –

46

tipi primitivi come char non può essere usato come parametri di tipo in Java. È necessario utilizzare il tipo di involucro:

Stack<Character> stack = new Stack<Character>(); 
11

char è uno dei tipi di dati primitivi in ​​Java, which cannot be used in generics. È possibile, tuttavia, sostituire l'involucro java.lang.Character, come in:

Stack<Character> stack = new Stack<Character>(); 

si può assegnare un Character ad un char o viceversa; Java rappresenterà il valore autobox.

Problemi correlati