在这个我问的问题的答案中。Kathy Van Stone说像这样添加一个数组
jList1.setListData(LinkedHashMap.keySet().toArray());
是比这样做更好的方法
jList1.setListData(new Vector<String>(LinkedHashMap.keySet()));
我想知道这是否有任何真相,如果是这样,背后的原因是什么。
在这个我问的问题的答案中。Kathy Van Stone说像这样添加一个数组
jList1.setListData(LinkedHashMap.keySet().toArray());
是比这样做更好的方法
jList1.setListData(new Vector<String>(LinkedHashMap.keySet()));
我想知道这是否有任何真相,如果是这样,背后的原因是什么。
你需要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 构造函数版本相同。
看一下 JList 类中两个 setListData 方法的实现,您会发现这并不重要。我更喜欢第一个,只是因为不需要涉及另一个集合(矢量)