2010-11-28 67 views
3

如果我使用:這兩個對象在java中的初始化有什麼區別?

HashMap<String, Integer> test = new HashMap<String, Integer>(); 

或者使用:

HashMap test = new HashMap(); 

是否有其它方法,我可以適用於測試對象任何區別。像test.put(),test.get()等,如果初始化不同?

另外,如果我裝上去測試對象e.g像:

test.put("One", new Integer(5)); 
    test.put("Two", new Integer(4)); 
    test.put("Three", new Integer(3)); 

並將其顯示爲:

集設定= tokens.entrySet();
Iterator ik = test.iterator();

while(ik.hasNext()){ 
     Map.Entry me = (Map.Entry)ik.next(); 
     System.out.println(me.getKey() + " : " + me.getValue()); 

結果是沒有排序,restul是:

三:3 一:5 二:1

它遵循哪些規則?輸出的這種正常行爲是隨機顯示的?

+1

你在這裏提出完全不同的問題 - 一個關於泛型,另一個關於地圖。 – 2010-11-28 21:33:04

回答

7

在第一種情況下,散列圖鍵必須是字符串,值必須是整數。編譯器將執行相應的類型檢查。在第二種情況下,可以使用任何類型的對象。

這是完全正常的,你的HashMap條目以隨機順序打印。如果您想保留訂單,請改用LinkedHashMap。

2

在第一個示例中,只能將字符串作爲鍵和整數作爲值,但在第二個示例中,您可以將任何內容放入地圖中,編譯器無法幫助您獲得類型安全性。

閱讀更多關於Java Generics如何工作。

1

是的,使用HashMap時你會得到「隨機」迭代次序。如果您需要具有可預測的迭代順序的Map實現,請查看LinkedHashMap

0

在第一種情況下,鍵必須是字符串,且值必須是整數。

在第二種情況下,鍵和值可以是任何類型的對象。

HashMap和HashSet不保證插入順序。如果您希望它保持您插入值的順序,請嘗試使用LinkedHashMap。更清晰的得到的回答在以前的StackOverflow question here

0

我認爲這取決於您的使用, 如果你需要一個編譯器,讓你的重點和整數只添加字符串作爲值,那麼你需要指定參數類型, 否則如果你需要通過任何沒有任何限制的東西,那就使用第二個。

相關問題