哪个更好的方式来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
...或当然的了与数组构造函数版本相同的更改。
答
看看在JList类中两个setListData方法的实现,你会发现它并不重要。 我宁愿第一个,因为没有必要再涉及另一个集合(矢量)
可能总是在安全的一边,并实例化新的Vector/object ...除非你真的不能创建一个额外的对象 – 2009-06-05 01:45:05