1

我已经有一段时间没有接触 Java 了,我只是在浏览一些旧代码,试图将它更新到 Java 7;我只是想恢复速度。任何人都可以就以下代码提供一些建议,因为 Enumeration 现在似乎已被弃用。

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

使用 keySet() 方法而不是 keys() 然后您可以在返回的 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 回答
1

您可以使用HashMap代替 HashTable (已过时)和for-each 循环使用泛型来避免强制转换也是一种很好的做法:

//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 回答