为什么Java中的Stack实现在search(Object)方法中返回从栈顶开始的基于1的位置,而不是我们通常在数组中使用的基于0的位置?这是否有特殊原因或者如果我们使用基于0的索引会出现哪些问题?
Stack.search
返回的 位置 是从数据结构的末尾开始计算的,而 索引 是从开头开始计算的。范围通常被指定为半开区间,因此第一个元素距离边界的距离是非零的。类似的方法 List.lastIndexOf
给出了列表开头的值。 search
和 lastIndexOf
返回值的总和是 size
。search
位置与获取该元素所需进行的 pop
次数相匹配。编辑:有趣的是,它继续建议使用以下代码(甚至不链接到Deque 接口及其实现提供了更完整和一致的 LIFO 栈操作集,应优先使用。
Deque
类型):Deque<Integer> stack = new ArrayDeque<Integer>();
Queue<Integer> doNotDoThisFFS = new ArrayDeque<Integer>();
Stack<Integer> stack = new Stack<>();
"。Queue<Integer> stack = Collections.asLifoQueue(new ArrayDeque<Integer>());