IntStack

  1. import java.util.EmptyStackException;
  2.  
  3. public class IntStack {
  4.  
  5.     private int[] stack;
  6.     private int pointer;
  7.  
  8.     public IntStack() {
  9.         this(100);
  10.     }
  11.  
  12.     public IntStack(int size) {
  13.         stack = new int[size];
  14.         pointer = -1;
  15.     }
  16.  
  17.     public void push(int value) {
  18.         pointer++;
  19.         if (pointer >= stack.length) {
  20.             final int[] arr = new int[(int)(stack.length * 1.5)];
  21.             System.arraycopy(stack, 0, arr, 0, stack.length);
  22.             stack = arr;
  23.         }
  24.         stack[pointer] = value;
  25.     }
  26.  
  27.     public int pop() {
  28.         if (pointer < 0) throw new EmptyStackException();
  29.         return stack[pointer--];
  30.     }
  31.  
  32.     public void pushBoolean(boolean value) {
  33.         push(value ? 1 : 0);
  34.     }
  35.  
  36.     public boolean popBoolean() {
  37.         return (pop() != 0);
  38.     }
  39.  
  40.     public void pushString(String value) {
  41.         final int length = value.length();
  42.         for (int i = length - 1; i >= 0; i--) {
  43.             push(value.charAt(i));
  44.         }
  45.         push(length);
  46.     }
  47.  
  48.     public String popString() {
  49.         final int length = pop();
  50.         StringBuilder sb = new StringBuilder();
  51.         for (int i = 0; i < length; i++) {
  52.             sb.append((char)pop());
  53.         }
  54.         return sb.toString();
  55.     }
  56. }
Быстрый стек для int с автоматическим увеличением размера. Дополнительно имеет методы для посимвольного добавления строк. Использовался в прототипе виртуальной машины.

Реклама

Мы в соцсетях

tw tg yt gt