序文
データベース接続プール分析のコード例では、Enumeration を使用して Vector コレクションを走査していることがわかります。その後、コレクション クラスを横断するためにどのようなメソッドが使用できるかを調べるために情報を探したところ、Enumeration と Iterator を使用してコレクション クラスを横断する次の例が見つかりました。ただし、この例では列挙型の方が反復子よりも効率的であると述べましたが、実際にはそうではありません。データ量が少なすぎるためです。データの数が増加するにつれて、倍数の比は現れずに、両者の効率はますます近づきます。さらに、コレクション クラスを走査するために Iterator が一般的に使用されるようになりました。このクラスを使用してコレクションを走査するのは、Enumeration を使用する必要があることを明確に宣言したものだけです。
コード例
次のようにコードをコピーします。
パッケージedu.sjtu.erplab.hash;
java.util.Enumeration をインポートします。
java.util.Hashtableをインポートします。
java.util.Iteratorをインポートします。
java.util.Map.Entryをインポートします。
// トラバーサル ハッシュテーブル インスタンス
パブリック クラス TraveseHashTable {
public static void main(String[] args) {
//初期化してハッシュテーブルを作成
Hashtable<String, String> ht = new Hashtable<String, String>();
for (int i = 0; i < 10000; i++) {
ht.put("Key=" + i, "Val=" + i);
}
// 1. 列挙型を使用する
ロングスタート = System.currentTimeMillis();
Enumeration<String> en = ht.keys();//列挙を使用してキーを取得します
while (en.hasMoreElements()) {
en.nextElement();
}
長い終わり = System.currentTimeMillis();
System.out.println("列挙キーのコスト " + (end - start)
+ "ミリ秒");
// 2. 列挙型を使用する
開始 = System.currentTimeMillis();
Enumeration<String> en2 = ht.elements();//列挙を使用してこのキーと値のペアを取得します
while (en2.hasMoreElements()) {
en2.nextElement();
}
終了 = System.currentTimeMillis();
System.out.println("列挙要素のコスト " + (終了 - 開始)
+ "ミリ秒");
// 3. イテレータ
開始 = System.currentTimeMillis();
Iterator<String> it = ht.keySet().iterator();//イテレータを使用してこのキーを取得します
while (it.hasNext()) {
it.next();
}
終了 = System.currentTimeMillis();
System.out.println("反復子 keySet のコスト " + (終了 - 開始)
+ "ミリ秒");
// 4. イテレータ
開始 = System.currentTimeMillis();
Iterator<Entry<String, String>> it2 = ht.entrySet().iterator();//イテレータを使用してこのキーと値のペアを取得します
while (it2.hasNext()) {
it2.next();
}
終了 = System.currentTimeMillis();
System.out.println("反復子のエントリセットのコスト " + (終了 - 開始)
+ "ミリ秒");
}
}
非推奨のインターフェース: 列挙型
Enumeration インターフェイスは JDK 1.0 で導入され、最適な反復出力インターフェイスです。Vector が最初に使用されたとき (現在は ArrayList が推奨されています)、出力には Enumeration インターフェイスが使用されました。 Enumeration は古いクラスですが、JDK1.5 以降に拡張され、汎用的な操作アプリケーションが追加されました。
Enumeration インターフェイスの一般的に使用されるメソッドには、hasMoreElements() (次の値があるかどうかを判断する) および nextElement() (現在の要素を削除する) があります。ただし、これらのメソッドの機能は、次のメソッドがあることを除いて、Iterator と似ています。 Iterator ではデータを削除しますが、このインターフェイスには削除操作がありません。
Enumeration インターフェイスを使い続けるのはなぜですか?
Enumeration インターフェイスと Iterator インターフェイスには同様の機能があり、Iterator には Enumeration よりも多くの機能があるのに、なぜ Enumeration を使用するのでしょうか。これは、Java の開発には長い時間がかかり、一部の古いシステムやクラス ライブラリのメソッドでは依然として Enumeration インターフェイスが使用されているため、互換性を確保するために依然として Enumeration を使用する必要があります。
List インターフェースの共通サブクラス
List インターフェイスの一般的に使用されるサブクラスには ArrayList と Vector があり、これら 2 つの比較は次のとおりです。