这个堆栈的定义属性被称为"后进先出,"或LIFO
考虑以下代码片段
Stack<String> theStack = new Stack<String>();
theStack.push ("A");
theStack.push ("B");
theStack.push ("C");
theStack.remove (1); // removes B
打印输出
System.out.println(theStack);
产生输出
[A, C]
由于 Stack 是List界面的一部分,删除方法可用,
&#34;因此它违反了堆栈的LIFO属性&#34;
这是在Java集合框架中有目的地设计的吗?
答案 0 :(得分:0)
如果Stack
实现List
,它会以多种方式发挥作用:这意味着它可以在需要List
的地方使用。
但是如果你把它当作一个堆栈使用,那么你就不得不在它上面进行合理的堆栈式操作,这包括不要随意地从中间掏出东西。
这并不意味着它是一个糟糕的LIFO队列实现,它只是意味着你必须小心以LIFO方式使用它。
(也就是说,Stack.remove()
投掷OperationNotSupportedException
可能会有很好的理由。)
答案 1 :(得分:0)
并非所有在Java框架中设计的集合都遵循算法计数器部分。对于例如队列是FIFO,但它是由LinkedList实现的(因为链表实现了Queue接口),所以你可以做你不希望队列做的事情(比如从指定位置移除元素,空插入等)。如果要创建用于严格定义算法操作的API,则:
1.创建自己的类并通过java类备份它们
2.在编码时要注意,不要称不相关的方法。