Stack Java фиксированного размера

1

Я хочу создать стек фиксированного размера и обрезать стек, когда он будет заполнен. Для этого уже существует подход в создании стека фиксированного размера, но я не хочу реализовывать класс.

Можно сделать что-то подобное?

Stack<String> stack = new Stack<String>(){
    private static final long serialVersionUID = 1L;
    public String push(String item) {
        if (this.size() == FIXED_SIZE) {
            //truncate()
        }
        return super.push(item);
    }
};

Остальные методы стека остаются прежними?

Теги:
stack

3 ответа

2
Лучший ответ

Так вот что я нашел в документации. Я не использовал и не тестировал его. Поэтому я не уверен, как это сработает. Поскольку removeElementAt() наследуется от класса Vector, и я надеюсь, что removeElementAt(0), все равно удалит элемент внизу.

Stack<String> stack = new Stack<String>(){
    private static final long serialVersionUID = 1L;
    public String push(String item) {
        if (this.size() == FIXED_SIZE) {
            this.removeElementAt(0);
        }
        return super.push(item);
    }
};

И также я предполагаю, что вы имели в виду, что усечка заключается в удалении элемента first-in, находящегося в данный момент в списке, если вы просто хотите отклонить новый приближающийся элемент, вы можете просто вернуть null.

  • 0
    Именно это. Спасибо!
0

Как насчет чего-то вроде этого:

 Public class TruncatedStack<T> extends FixedStack<T>
 {         
     private static final long serialVersionUID = 1L;
     @Override
     public String push(String item) {
     if (this.top == size) {
        this.top = -1;
     return super.push(item);
    }

 }
0

Написал это с моей головы (непроверенный). Как упоминалось в комментариях, стек фиксированного размера представляет собой просто массив со счетчиком, чтобы отслеживать верх.

public class FixedSizeStack {
  int top, numElements;
  int[] baseArray;

  public FixedSizeStack(int maxSize) {
    top = 0;
    numElements = 0;
    baseArray = new int[maxSize];
  }

  public void push(int num) {
    baseArray[top] = num;
    top = (top+1) % baseArray.length;
    numElements++;
  }

  public int pop(int num) {
    if(numElements == 0) return null;  //or throw exception--you've removed too many elements!
    numElements--;

    top = (top == 0) ? (baseArray.length - 1) : (top - 1);
    return baseArray[top];
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню