Позиция , возвращаемая Stack.search
, относится к концу структуры данных, тогда как индексы - к началу. Диапазоны обычно указываются как полуоткрытые интервалы, поэтому имеет смысл, что расстояние первого элемента от границы не равно нулю. Аналогичный метод List.lastIndexOf
дает значение с начала списка. Сумма значений, возвращаемых search
и lastIndexOf
, равна size
.
@ TJCrowder также указывает на то, что позиция search
соответствует количеству pop
с, которые вам нужно сделать, чтобы получить этот элемент.
Обратите внимание, что состояние документации API:
Более полный и согласованный набор операций стека LIFO обеспечивается интерфейсом Deque и его реализациями, которые следует использовать. в предпочтении этому классу.
Редактировать: Забавно, он продолжает предлагать этот код (не удосужившись связать тип Deque
):
Deque<Integer> stack = new ArrayDeque<Integer>();
Из-за неправильных решений Deque
является Queue
. Таким образом, вы могли, но не должны писать:
Queue<Integer> doNotDoThisFFS = new ArrayDeque<Integer>();
Правильное заклинание для записи "Stack<Integer> stack();
":
Queue<Integer> stack = Collections.asLifoQueue(new ArrayDeque<Integer>());