Java 在jList、vector或array中设置ListData的更好方法是什么?

Java 在jList、vector或array中设置ListData的更好方法是什么?,java,hashmap,jlist,Java,Hashmap,Jlist,回答我的一个问题。这样添加一个数组 jList1.setListData(LinkedHashMap.keySet().toArray()); 是比这样做更好的方法 jList1.setListData(new Vector<String>(LinkedHashMap.keySet())); jList1.setListData(新向量(LinkedHashMap.keySet()); 我想知道这是否是真的,如果是真的,那么背后的原因是什么。看看这两个setListData方法

回答我的一个问题。这样添加一个数组

jList1.setListData(LinkedHashMap.keySet().toArray());
是比这样做更好的方法

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

我想知道这是否是真的,如果是真的,那么背后的原因是什么。

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

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

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

看起来Kathy Van Stone可能指的是
Vector
中的额外同步

请仔细注意JavaDoc:

创建的模型直接引用给定的向量。试图修改 构建列表后的向量将导致未定义的行为

不幸的是,的JavaDoc具有相同的警告:

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

您必须确定是否有人认为
向量
稍后在同一方法中有用,从而修改代码如下:

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
Vector vec=新向量(LinkedHashMap.keySet());
jList1.setListData(vec);
//其他关于向量的东西
向量添加(..);//添加一些适合向量的数据类型

。。。当然,数组构造函数版本也有同样的变化。

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

看起来Kathy Van Stone可能指的是
Vector
中的额外同步

请仔细注意JavaDoc:

创建的模型直接引用给定的向量。试图修改 构建列表后的向量将导致未定义的行为

不幸的是,的JavaDoc具有相同的警告:

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

您必须确定是否有人认为
向量
稍后在同一方法中有用,从而修改代码如下:

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
Vector vec=新向量(LinkedHashMap.keySet());
jList1.setListData(vec);
//其他关于向量的东西
向量添加(..);//添加一些适合向量的数据类型

。。。当然,数组构造函数版本也会有同样的变化。

最好始终保持安全,并实例化新的向量/对象。。。除非你真的不能以任何方式创建一个额外的对象——数组或向量,否则这只是一个迭代和创建哪个对象更有效的问题。直觉说是数组,但实际上测试是有序的。@Yishai:是的,如果你真的关心时间,那么就分析它。但是,由于向量是同步的(并且内部有一个数组支持,对吗?),如果纯数组的速度较慢,我会感到惊讶。可能最好始终保持安全,并实例化新的向量/对象。。。除非你真的不能以任何方式创建一个额外的对象——数组或向量,否则这只是一个迭代和创建哪个对象更有效的问题。直觉说是数组,但实际上测试是有序的。@Yishai:是的,如果你真的关心时间,那么就分析它。但是由于向量是同步的(并且内部由数组支持,对吗?),如果纯数组的速度较慢,我会感到惊讶。