Java 6 SE 向量过时了吗?

Java 6 SE are vectors obsolete?

提问人:Aaron 提问时间:4/23/2011 更新时间:4/23/2011 访问量:12691

问:

package myjava;
import java.util.*;
public class Vectors {
    public static void vec() {
        Vector v = new Vector();
    }
}

我正在使用 net beans IDE 6.9.1,它告诉我这是一个“过时的集合”。 除了显而易见的,它已经过时了,我会在 Java 中使用它吗? 我对使用它们感到非常兴奋。

Java 向量

评论

1赞 David J. Liszewski 4/23/2011
几乎和 stackoverflow.com/questions/1386275/ 一样的问题......

答:

2赞 Joseph Ottinger 4/23/2011 #1

它通常已经过时了,是的。就其内容而言,它与 ArrayList 相同,但增长特征略有不同;Vector 也会在每个方法上同步,这意味着每次调用同步都会有(可能的)性能损失。在 Java 6 上,同步远不如以前版本的 Java 那么昂贵,但结果仍然是应该对 ArrayList 而不是 Vector 有强烈的偏好。

同样,您应该更喜欢 HashMap 而不是 HashTable。

评论

1赞 ouertani 5/6/2014
HashTable 是 Hashtable 的永恒错误
0赞 Joseph Ottinger 5/15/2014
是的,很公平。但它仍然是 Hashtable - 因为没有人应该使用它,所以实际的骆驼箱是什么并不重要。使用 Map 和 HashMap。:)
5赞 MAK 4/23/2011 #2

一段时间以来,一直不鼓励使用 s。它们被替换为 ,它或多或少具有相同的功能(但不同步)。VectorArrayList

评论

0赞 Joseph Ottinger 4/23/2011
他们的弃用是非正式的,而不是正式的。Vector 尚未在源中标记为@Deprecated。
2赞 Aaron 4/23/2011
因此,如果堆栈是向量的子类,那么堆栈是否也被非正式地弃用了?
1赞 Joseph Ottinger 4/23/2011
@Matthew:没错。请参阅 download.oracle.com/javase/6/docs/api/java/util/Stack.html - 没有弃用标签,尽管有一条评论将您推向 ArrayDeque 的方向。
2赞 MAK 4/23/2011
@Matthew:没有。我认为不鼓励使用,因为有一个替代实现是集合框架的一部分。没有备用堆栈实现,因此仍未被视为已弃用。VectorListStack
0赞 MAK 4/23/2011
@JosephOttinger:谢谢,我已经编辑了我的答案,使其更清晰。
2赞 Yet Another Geek 4/23/2011 #3

请注意,您还应该优先使用 ArrayList 的通用版本,因为非通用版本仅适用于 Java 1.4(4) 支持。

例:

//ArrayList of integers
ArrayList<Integer> list = new ArrayList<Integer>();
2赞 Chankey Pathak 4/23/2011 #4

java.util.Vector 或 java.util.Hashtable,虽然仍然受支持,但这些类已被 JDK1.2 集合类淘汰,可能不应该在新的开发中使用。