为什么堆栈使用List接口java集合

时间:2014-09-11 18:15:06

标签: java

这个堆栈的定义属性被称为"后进先出,"或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集合框架中有目的地设计的吗?

2 个答案:

答案 0 :(得分:0)

如果Stack实现List,它会以多种方式发挥作用:这意味着它可以在需要List的地方使用。

但是如果你把它当作一个堆栈使用,那么你就不得不在它上面进行合理的堆栈式操作,这包括不要随意地从中间掏出东西。

这并不意味着它是一个糟糕的LIFO队列实现,它只是意味着你必须小心以LIFO方式使用它。

(也就是说,Stack.remove()投掷OperationNotSupportedException可能会有很好的理由。)

答案 1 :(得分:0)

并非所有在Java框架中设计的集合都遵循算法计数器部分。对于例如队列是FIFO,但它是由LinkedList实现的(因为链表实现了Queue接口),所以你可以做你不希望队列做的事情(比如从指定位置移除元素,空插入等)。如果要创建用于严格定义算法操作的API,则:
1.创建自己的类并通过java类备份它们 2.在编码时要注意,不要称不相关的方法。