2013-03-12 27 views
1

我還沒有碰過Java一段時間,我只是想通過一些舊代碼嘗試將它更新到Java 7;我只是想恢復速度。任何人都可能提供一些關於下面的代碼的建議,因爲現在Enumeration似乎已被棄用。java - 使用枚舉從哈希表中獲取數據的問題

private Hashtable table = new Hashtable(); 

...

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

任何幫助或建議將不勝感激;謝謝。

回答

1

您可以使用HashMap而不是HashTable(已廢棄)和for-each loop。這也是使用generics以避免強制轉換好的做法:

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

for (String element : table.values()) { 
    System.out.println(element); 
} 
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); 
} 
1

枚舉不會被棄用,它剛剛被泛型化。對於你的散列表和枚舉,你應該指定具體的類型。例如:

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

在這種情況下,您的鍵是整數,您的值是字符串。新的泛型爲您的代碼提供更強大的類型安全性。你當然也應該考慮使用一些較新的集合類(例如HashMap)。

+1

如果它不被棄用,它至少已經過時了... – assylias 2013-03-12 17:25:06

+0

@assylias - 是的,儘管我更喜歡術語legacy。現代Java代碼真的不應該使用那些傳統的集合類型。 – Perception 2013-03-12 17:26:28

1

使用keySet()方法代替keys(),然後您可以在返回的Set上使用迭代器,或者爲迭代代碼使用增強型for循環,如下所示;

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

您不必將表的實現切換到HashMap,但它被建議,除非你不能。如果需要,你仍然可以在Hashtable上使用keySet()