在this回答我問的問題。 Kathy Van Stone說,增加一個陣列,像這樣哪個更好的方式來setListData在jList,向量或數組?
jList1.setListData(LinkedHashMap.keySet().toArray());
是不是不喜歡這樣
jList1.setListData(new Vector<String>(LinkedHashMap.keySet()));
如果有任何道理的,我想知道,如果是一個更好的辦法是什麼背後的原因是。
在this回答我問的問題。 Kathy Van Stone說,增加一個陣列,像這樣哪個更好的方式來setListData在jList,向量或數組?
jList1.setListData(LinkedHashMap.keySet().toArray());
是不是不喜歡這樣
jList1.setListData(new Vector<String>(LinkedHashMap.keySet()));
如果有任何道理的,我想知道,如果是一個更好的辦法是什麼背後的原因是。
你需要Vector
類提供的同步嗎?如果不是,那麼你不想使用Vector
類。 (如果僅允許使用JList
,則使用ArrayList
代替)。在最近的JVM版本中,無爭用同步的成本爲,方式爲,比原來低。不過,沒有理由使用不必要的同步。
它看起來像凱西凡斯通可能是指在Vector
額外的同步。
注意仔細public JList(Vector<?> listData)
的JavaDoc:
創建的模型直接引用給定Vector。試圖在構造列表後修改 向量會導致未定義的行爲。
不幸的是,public JList(Object[] listData)
的JavaDoc具有同樣的警告:
創建的模型給定的數組直接引用。嘗試在構造列表後修改 數組會導致未定義的行爲。
你必須決定是否有一些人在決定該Vector
是在同一個方法以後有用的任何可能性,從而改變這樣的代碼:
Vector vec = new Vector<String>(LinkedHashMap.keySet());
jList1.setListData(vec);
// Other stuff with Vector
vec.add(....); // Adding some data type that fits in the Vector
...或當然的了與數組構造函數版本相同的更改。
看看在JList類中兩個setListData方法的實現,你會發現它並不重要。 我寧願第一個,因爲沒有必要再涉及另一個集合(矢量)
可能總是在安全的一邊,並實例化新的Vector/object ...除非你真的不能創建一個額外的對象 – 2009-06-05 01:45:05