2014-01-16 64 views
1

我應該什麼時候做一個,我應該什麼時候做另一個,尤其是在兩者都滿足的情況下?例如,考慮我是否需要一個類型爲<String, String>的Hashmap。是否有任何理由做一個類型爲<Object, Object>的散列表?創建具有定義類型與對象的Hashmap是否具有性能優勢?

是否有性能好處/處罰,或者是清晰度問題?

+6

泛型是你的朋友。 http://docs.oracle.com/javase/tutorial/java/generics/index.html –

+0

您的問題僅在'java-1.4'之前有效。從'java-1.5'的泛型會做訣竅 –

+0

順便說一句你只能在HashMap中存儲一個對象的引用,你不會存儲/複製實際的對象。 –

回答

6

我想你正在使用的HashMap是這樣的:

Map map = new HashMap(); 
map.put("aKey","value"); 
String v =(String)map.get("aKey"); 

您可以使用它像這樣:

Map<String,String> map= new HashMap<String,String>(); 
map.put("aKey","value"); 
String v = map.get("aKey"); 
3

因爲它被用作多態引用。你想要的字符串我可能想要我自己的自定義類。因此,使它通用,他們已經使用了對象。但是,您可以使用泛型來避免投射。

+0

謝謝!我不完全理解泛型(除了表面上的意思),所以這對我來說有點模糊。 – itsmichaelwang

2

這取決於你如何初始化。按照JavaDocs,在HashMap可以採取什麼是存儲的數據類型,因此,如果你這樣做:

Map hashMap = new HashMap(); 
map.put("hello", "abc"); 

您將需要轉換爲拿回你的密鑰和數據。但是,如果你這樣做:

Map<String, String> hashMap = new HashMap<>(); 
map.put("hello", "abc"); 

你不再需要投射你擁有的物體。有關泛型的更多信息,請參閱here

1
  //If you dont make generic then you have to cast the object 
      HashMap myMap = new HashMap(); 

      // If you make it generic then you dont have to cas the object 
      HashMap<String, String> myMap2 = new HashMap<String, String>(); 
1
  1. 一個附加的澄清是,....對象從不存儲一個HashMap內部。而是將對象的引用/標識保留在內部。
  2. 在檢索時,實際引用是從該位置(由HashMap給出)中提取並提供給調用者。
  3. Java泛型的目的是僅應用編譯時檢查;它已經注意到了運行時間。
  4. 如果引用指向一個Integer並且類型轉換期望一個String,該怎麼辦?
  5. 泛型簡化了編程,並有助於在運行時避免類拋出錯誤。
相關問題