哪个更好的方式来setListData在jList,向量或数组?

问题描述:

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 

...或当然的了与数组构造函数版本相同的更改。

+0

可能总是在安全的一边,并实例化新的Vector/object ...除非你真的不能创建一个额外的对象 – 2009-06-05 01:45:05

看看在JList类中两个setListData方法的实现,你会发现它并不重要。 我宁愿第一个,因为没有必要再涉及另一个集合(矢量)