簡體   English   中英

在java中使用Vector是否安全?

[英]Is it safe to use Vector in java?

我寫了以下java代碼:

public static void main(String[] args) {
    Vector vector = new Vector();
    for(int i=1; i<=10; i++)
        vector.addElement(i);

    Enumeration vEnum = vector.elements();
    while(vEnum.hasMoreElements())
        System.out.println(vEnum.nextElement());
}

在編譯它時會收到以下警告消息:

Note: TestJavaApplication.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

Netbeans抱怨“過時收藏”的消息。

在這種情況下,你推薦我什么?

注意 ,我需要在J2ME應用程序中使用Vector作為存儲元素順序的動態數組。 我很樂意使用Hashtable但不幸的是它不存儲其元素的順序。

編輯1在查看此答案后,我從Vector vector = new Vector();更改了聲明Vector vector = new Vector(); Vector<String> vector = new Vector<String>(); 現在又收到另一條警告信息:

TestJavaApplication.java:2: warning: com.sun.org.apache.xerces.internal.parsers.IntegratedParserConfiguration is Sun proprietary API and may be removed in a future release
import com.sun.org.apache.xerces.internal.parsers.IntegratedParserConfiguration;
                                                 ^

謝謝。

您看到的關於“未檢查或不安全操作”的警告是因為Vector是參數化類型。 它實際上是Vector<E> ,你應該在使用Vector時提供一個類型參數。 如果您使用“原始” Vector那么您將無法獲得Java的泛型框架的任何優勢。 “不安全”警告意味着您錯過了某種類型的安全性。

“過時類型”警告就在那里,因為Vector已經(基本上)不贊成使用List及其實現( ArrayListLinkedList等)。

各種List類型是Vector的通用替換。 ArrayList可以用作Vector的一個或多或少的替代品,但是你應該注意一些差異。 閱讀javadocs以獲取更多信息。

最重要的區別是Vector是線程安全的,但ArrayListLinkedList不是。 如果您依賴於Vector的內置線程安全性,那么您應該查看Collections.synchronizedList方法。

編輯:哦,你正在使用JavaME。 在這種情況下,你可能會遇到Vector 然而,通用類型警告仍然適用。

如果您願意,可以忽略警告。 他們有沒有告訴你,如果你不小心有可能是一個問題,但如果細心,你會沒事的。

不安全警告與Vector無關。 只是代碼沒有指定Vector應包含的內容。 通常,您希望使用ArrayLists而不是Vectors,並且您可能還想指定將在容器中的類型。

Enumeration接口也已過時。 你應該更喜歡迭代器。 事實上,有一些語言功能可以利用它們。 例如循環的“新”。

注意:我假設J2ME支持這些功能。 如果沒有,那么“舊方式”就沒有錯。 他們只是不是最優的。

例如(不適用於J2ME,但適用於Java 5或更高版本)

public static void main(String[] args) {
    ArrayList<Integer> vector = new ArrayList<Integer>();
    for(int i=1; i<=10; i++)
        vector.addElement(i);

    for(Integer i : vector)
        System.out.println(i);
}

根據gnat的評論,上述代碼在J2ME中不起作用,J2ME是1.3的子集。 顯然,甚至不支持ArrayList。 所以問題示例中的原始代碼看起來就像是要走的路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM