使用ArrayList或Vector检索枚举



请参阅返回Enumeration<?>

的两个不同的实现
Vector<String> v = new Vector<>(map.keySet());
return v.elements();

List<String> v = new ArrayList<>(map.keySet());
return Collections.enumeration(v);

请注意,此处的返回类型Enumeration<?>,无法更改。

使用一个优点比另一个优势?

随着枚举类的同步,我应该最好坚持使用Vector


我的目的不是比较向量与数组列表,而是要从上述两个特定代码使用中找到更好的实现。这里的答案也不同于ArrayList和Vector之间的区别?

所以我认为这不符合重复。

都不。您不需要这些。Collections.enumeration()采用Collection参数,SetCollectionMap.keySet()返回Set

您只需要:

return Collections.enumeration(map.keySet());

使用这些过时的 - 尽管不弃用 - 通常是业务决定。您对此无能为力,除非,如果可能的话,请使用其他API。

我不会使用Vector。如果您不需要自己的代码中的同步,请使用集合框架。如果确实需要同步,请使用同步,请使用java.util.concurrent的类。

无论哪种方式,请使用Collections.enumeration将其转换为枚举。

很好地取决于您的用例否则使用向量。

我认为,如果您想获得枚举,就没有区别。

矢量构成如下。

public Vector(Collection<? extends E> c) {
    elementData = c.toArray();
    elementCount = elementData.length;
    // c.toArray might (incorrectly) not return Object[] (see 6260652)
    if (elementData.getClass() != Object[].class)
        elementData = Arrays.copyOf(elementData, elementCount, Object[].class);
}

arraylist构造函数如下。

 public ArrayList(Collection<? extends E> c) {
    elementData = c.toArray();
    if ((size = elementData.length) != 0) {
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, size, Object[].class);
    } else {
        // replace with empty array.
        this.elementData = EMPTY_ELEMENTDATA;
    }
}