Java使用Vector实现Stack类,为什么?尽管看起来Arraylist应该是更好的选择。 Java希望堆栈是线程安全的,还是一般堆栈(我认为不是这种情况)是线程安全的还是强制性的,或者有任何其他理论使用Vector来实现Java堆栈?为什么java.util.Stack是使用Vector实现的而不是Arraylist
2
A
回答
3
Stack
和Vector
出现在JDK 1.0中。直到JDK 1.2才加入ArrayList
。 Stack
的Vector
的继承被烘焙到API中,所以现在不可能改变。
但是这是一个过时的类,反正。解决它不是一个优先事项。 Stack
自己的Javadoc新手必看说:
更完整和一致的LIFO堆栈操作是由
Deque
接口和它的实现,应优先使用这个类提供。例如:Deque<Integer> stack = new ArrayDeque<Integer>();
2
我怀疑这仅仅是历史性的。 java.util.Stack自Java 1.0以来一直存在,ArrayList直到1.2才被引入。 Vector是他们在实施时的全部功能。
为什么不在1.2中改变它?那么,Sun和甲骨文一直非常小心地让Java向后兼容,并且从线程安全转向不是线程安全的突破。
相关问题
- 1. 为什么使用new运算符而不是std :: vector?
- 2. 为什么不是vector :: operator []实现类似于map :: operator []?
- 3. 为什么使用数组而不是BT实现分段树
- 4. 为什么SortedList实现使用ThrowHelper而不是直接抛出?
- 5. 为什么在实现Runnable时使用Thread.currentThread()。isInterrupted()而不是Thread.interrupted()?
- 6. 为什么在Android中使用ContextImpl实现Context而不是ContextWrapper?
- 7. 为什么策略模式使用实现而不是扩展?
- 8. 为什么ArrayList实现使用Object []?
- 9. 多态性:为什么使用“List list = new ArrayList”而不是“ArrayList list = new ArrayList”?
- 10. 为什么将数据库'Apples'读入列表而不是ArrayList,Vector或LinkedList?
- 11. 为什么ArrayList在内部使用Object [](而不是E [])?
- 12. 为什么Matrix上的'sum'返回矩阵,而不是Vector?
- 13. 为什么说“协作”实现“用例”而不是反之呢?
- 14. 为什么将xts实现为矩阵而不是数据框?
- 15. std :: vector构造函数 - 为什么int而不是int *?
- 16. 为什么使用classmethod而不是staticmethod?
- 17. 为什么使用iconv_strpos而不是strpos?
- 18. 为什么使用registerDefaults:而不是setValue:forKey:?
- 19. 为什么使用TagBuilder而不是StringBuilder?
- 20. 为什么,而不是使用回调
- 21. 为什么使用结构,而不是
- 22. 为什么使用StringWriter而不是StringBuffer?
- 23. 为什么使用s:Line而不是mx:HRule?
- 24. 为什么使用ImageIcon而不是Image?
- 25. 为什么使用SQLiteOpenHelper而不是SQLiteDatabase?
- 26. 为什么使用MapFragment而不是SupportMapFragment?
- 27. 为什么使用FloatBuffer而不是float []?
- 28. 为什么使用追加()而不是+
- 29. 为什么使用Number.parseInt而不是parseInt()?
- 30. 为什么使用JLE而不是JL?
可能的重复[ArrayList和Vector之间有什么区别?](http://stackoverflow.com/questions/2986296/what-are-the-differences-between-arraylist-and-vector) –
因为Stack和在JDK 1.0中,Vector在Java中同时引入了麻烦,并且在JDK1.2中引入了ArrayList很久之后 –