1

私はしばらくJavaに触れておらず、古いコードをJava 7に更新しようとしているところです。スピードを上げようとしているだけです。列挙型は現在廃止されているように見えるため、次のコードについてアドバイスを提供できる人はいますか。

private Hashtable table = new Hashtable();

...

Enumeration enum = this.table.keys();
while (enum.hasMoreElements()) {
   string test = (String) enum.nextElement();
  testMethod(test);
}

ヘルプやアドバイスをいただければ幸いです。ありがとう。

4

4 に答える 4

2
private Map<String, String> table = new HashMap<>();
for (Map.Entry<String, String> entry : table.entrySet()) {
    testMethod(entry.getKey());
}
for (String key : table.keySet()) {
    testMethod(key);
}
于 2013-03-12T17:22:48.573 に答える
1

HashTable (廃止されました) とfor-each loopの代わりにHashMapを使用できます。キャストを避けるために、ジェネリックを使用することもお勧めします。

//assumes the keys are int and values String
private Map<Integer, String> table = new HashMap<> ();

for (String element : table.values()) {
    System.out.println(element);
}
于 2013-03-12T17:22:22.637 に答える
1

列挙は非推奨ではなく、一般化されただけです。ハッシュ テーブルと列挙型の両方について、具体的な型を指定する必要があります。例えば:

Hashtable<Integer, String> table = new Hashtable<Integer, String>
Enumeration<Integer> enum = this.table.keys();

この場合、キーは整数で、値は文字列です。新しいジェネリックは、コードの型安全性を強化します。HashMapまた、いくつかの新しいコレクション クラス (たとえば、 など)の使用も検討する必要があります。

于 2013-03-12T17:23:48.107 に答える
1

keys() の代わりに keySet() メソッドを使用すると、返された Set で Iterator を使用するか、次のように反復コードを実行する拡張 for ループを使用できます。

private Map<String> table = new HashMap<String>();
for (String key: table.keySet())
  testMethod(key);

テーブルの実装を HashMap に切り替える必要はありませんが、できない場合を除き、お勧めします。必要に応じて Hashtable で keySet() を引き続き使用できます

于 2013-03-12T17:27:06.603 に答える