代码之家  ›  专栏  ›  技术社区  ›  Bobby

在jlist、vector或array中使用setlistdata的更好方法是什么?

  •  1
  • Bobby  · 技术社区  · 16 年前

    this 回答我问的问题。 Kathy Van Stone 说要添加这样的数组

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

    比这样做更好

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

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   Eddie    16 年前

    您是否需要 Vector 班级?如果没有,那么您不想使用 矢量 班级。(如果只是 JList 允许使用 ArrayList 而非竞争同步的代价是 方式 在最新的JVM版本中,比以前低了很多。不过,没有理由使用不必要的同步。

    看起来凯西·范斯通可能指的是 矢量 .

    仔细记下JavaDoc public JList(Vector<?> listData) :

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

    不幸的是,JavaDoc public JList(Object[] listData) 具有相同的警告:

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

    你必须决定是否有人决定 矢量 稍后在同一方法中很有用,因此可以这样修改代码:

    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
    

    …或者当然,与数组构造函数版本相同。

        2
  •  1
  •   Eugene Ryzhikov    16 年前

    看看jlist类中两个setlistdata方法的实现,您会发现它实际上并不重要。 我更喜欢第一个,只是因为不需要再涉及另一个集合(向量)

    推荐文章