哪个是在jList,vector或array中setListData的更好方法?

时间:2009-06-05 01:06:46

标签: java hashmap jlist

this回答我提出的问题。 Kathy Van Stone说添加类似的数组

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

比这样做更好的方式

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

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

2 个答案:

答案 0 :(得分:3)

您是否需要Vector班级提供的同步?如果没有,那么您不想使用Vector类。 (如果只允许JList使用ArrayList。)在最近的JVM版本中,无竞争同步的成本 way 更低,比以前低。但是,没有理由使用不必要的同步。

看起来Kathy Van Stone可能指的是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

...当然还有与Array构造函数版本相同的更改。

答案 1 :(得分:1)

看一下JList类中两个setListData方法的实现,你会发现它确实没关系。 我更喜欢第一个,因为没有必要涉及另一个集合(Vector)