2014-07-18 55 views
1

有誰知道爲什麼JTable中的Java Swing使用矢量作爲構造PARAMS:像JTable(Vector rowData, Vector columnNames),雖然矢量標記爲過時的集合。 (我知道還有其他選項,但使用Vector更方便)。它是否有與線程同步相關的任何內容?爲什麼Java Swing中的JTable使用Vector作爲構造函數參數?

+3

當第一次被介紹的Swing(回來的路上時,它是一個單獨的JAR),集合API不存在,'VECTOR'是唯一的「名單」之類的JDK提供的類。它的維護是因爲Java強調向後兼容性。由於Swing不是線程安全的,並且底層數據不應該在EDT的上下文之外進行修改,事實上,該列表是同步的事實與此無關,事實上,它實際上是同步的,這使得它成爲一個不好的候選者用於此用途,因爲它引入了可以減緩性能開銷 – MadProgrammer

+0

Vector是沒有過時,也沒有在這裏不推薦使用的文檔是:http://docs.oracle.com/javase/8/docs/api/deprecated-list.html – Typo

+0

@boolean:它在Netbeans 6+中被標記爲過時的集合。爲了您的信息:http://stackoverflow.com/questions/1386275/why-is-java-vector-class-considered-obsolete-or-deprecated – ipkiss

回答

4

雖然Vector既不是過時的,也不過時,它是原始DefaultTableModel的遺留;後來,它「被改裝來實現接口。」 Vector已同步,但爲此功能正確使用它實際上依賴於實現細節。相反,依靠其方法提供的類的Memory Consistency Properties發生在之間的關係。例如,SwingWorker,它實現Future<T>RunnableFuture<T>,是用於在event dispatch thread可靠地更新表的模型特別方便。這消除了冗餘同步模型內部數據結構的需要。

相關問題