1

这个我问的问题的答案中。Kathy Van Stone说像这样添加一个数组

jList1.setListData(LinkedHashMap.keySet().toArray());

是比这样做更好的方法

jList1.setListData(new Vector<String>(LinkedHashMap.keySet()));

我想知道这是否有任何真相,如果是这样,背后的原因是什么。

4

2 回答 2

3

你需要Vector类提供的同步吗?如果不是,那么您不想使用Vector该类。(如果只JList允许使用 anArrayList代替。)在最近的 JVM 版本中,非竞争同步的成本要低得多,比以前低得多不过,没有理由使用不必要的同步。

看起来 Kathy Van Stone 可能指的是Vector.

仔细注意 JavaDoc public JList(Vector<?> listData)

创建的模型直接引用给定的 Vector。在构造列表后尝试修改 Vector 会导致未定义的行为。

不幸的是,JavaDoc forpublic JList(Object[] listData)有同样的警告:

创建的模型直接引用给定的数组。在构造列表后尝试修改数组会导致未定义的行为。

您必须确定是否有人认为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

...或者当然与 Array 构造函数版本相同。

于 2009-06-05T01:24:48.707 回答
1

看一下 JList 类中两个 setListData 方法的实现,您会发现这并不重要。我更喜欢第一个,只是因为不需要涉及另一个集合(矢量)

于 2009-06-05T01:17:25.227 回答