2012-08-05 21 views
0

我有以下查詢,這是我下面這個就是HashMap類值..檢索HashMap中的簡單的核心Java代碼

HashMap map=new HashMap();//HashMap key random order. 
     System.out.println("Amit".hashCode()); 
     map.put("Amit","Java"); 
     map.put("mAit","J2EE"); 
     map.put("Saral","J2rrrEE"); 

,如果我要檢索的陣列控制檯上的元素查看輸出的代碼將如..

Set s=map.entrySet(); 
     Iterator itr=s.iterator(); 
     while(itr.hasNext()) 
     { 
      Map.Entry m=(Map.Entry)itr.next(); 
      System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode()); 
      } 

現在我們投它,因爲它需要的Map.Entry,我們有)稱爲信息getKey(方法和getValue(),我清楚的地圖.entry也是,但我想通過簡單的核心Java代碼檢索沒有這些內置函數的數組,請告知h要實現這一點..!

我不想使用getkey()或getvalue()等集合的任何內置函數來檢索地圖的內容,我想使用簡單的java代碼來檢索給定密鑰的值或所有的鍵必須有一些邏輯背後的getkey()和getvalue(),這是建立在我想使用的核心Java上。

是否有任何方法通過簡單的java程序本身檢索地圖的內容.. !!沒有使用內置的集合函數..!

+4

什麼陣列retrive值.... – assylias 2012-08-05 15:54:57

+2

',而不使用內置的收集功能..' - ?!好像你去一些學校教學錯誤。建立在收集功能內置於...使用。 – dantuch 2012-08-05 16:27:00

+0

剛剛看到你的編輯:你爲什麼要這麼做?無論是爲了教育目的,你可以簡單地看看來源或...以及我找不到另一個原因... – assylias 2012-08-05 16:39:36

回答

4

我不確定你在找什麼數組,你的代碼中沒有數組。

你會通過使用泛型來簡化你的生活。聲明地圖爲:

HashMap<String, String> map = new HashMap<String, String>(); 

你的第二個片段可與增強的for循環寫:

for (Map.Entry<String, String> m : map.entrySet()) { 
    System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode()); 
} 

如果你只是想爲你的標題所暗示的,以獲取值:

for (String value : map.values()) { 
    System.out.println(value); 
} 
0

試穿吧values()方法

for (String sVal : map.values()) { 

    System.out.println("Your values :"+ sVal); 
} 
+0

請查看更新後的帖子..!請使用 – user1577449 2012-08-05 16:05:41

+0

,不要再使用匈牙利符號... :( – dantuch 2012-08-05 16:22:56

1

您要檢索的Map.Entry的數組對於HashMap是私有的,無法直接訪問。但你不應該由擔心,因爲你總是可以從的entrySet得到另一個數組實例:

Set s=map.entrySet(); 
Map.Entry[] entries = s.toArray(new Map.Entry[0]); 

後您編輯:

爲什麼你要避免使用HashMap中提供檢索的API數值給出了一個關鍵? iteratorgetKey()和和getValue()中的邏輯無法在這些方法之外進行復制,因爲只有這些方法才能訪問HashMap的私有狀態。即使你可以複製這些方法以外的邏輯,這也會破壞面向對象編程的所有原則,所以 - 不要那麼做!

+0

請查看更新後的帖子 – user1577449 2012-08-05 16:09:30

3

您可以使用keyset()或values()函數來獲取一組鍵或一組值。

我不想使用收集功能的內置,如信息getKey()或的GetValue()用於檢索地圖

的內容,如果它是一個HashMap的內部表示你在追求,遠離它。內部數據結構是爲了抽象hashmap的內部。與常規哈希映射相比,鏈接哈希映射可以被不同地表示。無論如何,你爲什麼要訪問內部結構? API開發人員不允許訪問這些表示。

如果你很絕望,你可以隨時查看散列表的私有成員變量,並通過反射使它們可訪問。但是,請僅將這些解決方案用於學術目的。

2

我認爲你不瞭解面向對象的概念。 HashMap是一個類,當你說new HashMap()時,你創建了這個類的一個新對象。這個類有一些私人領域,也許是一個數組或類似的東西。但重點是,你不知道這一點。這個班正在隱藏它的領域 - 他們是私人的。要訪問這些字段並使用它們,該類將提供方法。例如。一種稱爲put(...)的方法添加一個新元素或稱爲get(...)的方法來檢索一個元素。

你不能使用任何核心Java事物來訪問這些字段 - 沒有任何語法來訪問類的私有字段。你可以使用HashMap的方法,沒有其他(簡單)方法。 (好吧,這是一個完美的話題,但這是一個完整的其他主題......)。

當然,HashMap是用一些「核心Java」編寫的。如果您對如何看起來感興趣,請查看源代碼java.util.HashMap

0

通過使用這種增強的for循環中,我們可以很容易地從地圖

for (String variable : map.values()) { 
    System.out.println(variable); 
}