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很久之後 –