2014-10-07 87 views
52

下面是值包含HashMap中HashMap的 - 讓第一個關鍵值

statusName {Active=33, Renewals Completed=3, Application=15} 

Java代碼來獲取第一密鑰(即激活)

Object myKey = statusName.keySet().toArray()[0]; 

我們如何收集的第一個關鍵「值「(即33),我想將」Key「和」Value「都存儲在單獨的變量中。

+4

你確實意識到'HashMap'條目是無序的,所以每當你修改地圖時,「第一個」都會改變。 – NPE 2014-10-07 06:57:28

+0

你知道'HashMap'中沒有特定的順序嗎?如果你修改它,你可能會得到完全不同的結果。 – 2014-10-07 06:57:38

+0

不,訂單不能保證運行,但在同一個線程內,可以依靠訂單。 – hd1 2014-10-07 06:58:24

回答

93

你可以試試這個:

Map<String,String> map = new HashMap<>(); 
Map.Entry<String,String> entry = map.entrySet().iterator().next(); 
String key = entry.getKey(); 
String value = entry.getValue(); 

請記住,HashMap不保證插入順序。使用LinkedHashMap保持訂單不變。

如:

Map<String,String> map = new LinkedHashMap<>(); 
map.put("Active","33"); 
map.put("Renewals Completed","3"); 
map.put("Application","15"); 
Map.Entry<String,String> entry = map.entrySet().iterator().next(); 
String key= entry.getKey(); 
String value=entry.getValue(); 
System.out.println(key); 
System.out.println(value); 

輸出:

Active 
33 
+0

我知道這是一個非常古老的答案..這是工作hashmaps鍵和價值作爲字符串。但是當嘗試使用與對象相同的值來獲取投射錯誤時:'com.google.gson.internal.LinkedTreeMap無法轉換爲...'...我在正確的位置使用了「String」而不是「String」 ...無法在網上找到答案..幫助 – 2017-11-21 11:03:06

+0

@darthydarth你應該根據你的上下文使用正確的類型。 – 2017-11-21 11:28:33

+0

首先感謝您的回答!沒想到......第二我發現,在運行時沒有保存的泛型沒有問題。最終我通過使用'Gson'將值對象轉換爲String來破解它,然後將其解析爲我的類類型。它的醜陋,但我真的無法找到任何其他解決方案很容易在其他語言(我現在正在學習Java) – 2017-11-21 11:38:06

4

how can we collect the first Key "Value" (i.e 33)

使用youMap.get(keyYouHave),你可以得到它的價值。

want to store the Both "Key" and "Value" in separate variable

是的,你可以分配給一個變量。

等待.........它沒有結束。

如果您(業務邏輯)取決於插入和檢索的順序,您將看到奇怪的結果。地圖沒有排序,他們不會按順序存儲。請注意這一事實。使用一些替代品來保存您的訂單。可能是一個LinkedHashMap

32

獲得 「第一」 值:

map.values().toArray()[0] 

獲得 「第一」 鍵的值:

map.get(map.keySet().toArray()[0]) 

注:以上代碼測試和工程。

我說「第一」,因爲HashMap條目沒有排序。

但是,LinkedHashMap以與插入順序相同的順序迭代它的條目 - 如果插入順序很重要,可以將其用於地圖實現。

0

請注意,你要注意,你的邏輯流絕不能依賴於訪問以某種順序的HashMap元素,簡單地說,因爲HashMap s的不排序Collection s以及是不是他們的目的是做。 (您可以在this post中閱讀更多關於訂購和分揀集合的信息)。

Object myKey = statusName.keySet().toArray()[0]; 

只需撥打map.get(key)來獲取各自的值:

Object myValue = statusName.get(myKey); 
-1

您還可以試試下面

回到崗位,你已經通過加載的第一個元素鍵做了一半的工作:

Map.Entry<String, Integer> entry = myMap.firstEntry(); 
System.out.println("First Value = " + entry); 
10

的Java做的8路,

String firstKey = map.keySet().stream().findFirst().get();

0

記住插入順序沒有地圖尊重一般來說。試試這個:

/** 
    * Get the first element of a map. A map doesn't guarantee the insertion order 
    * @param map 
    * @param <E> 
    * @param <K> 
    * @return 
    */ 
    public static <E,K> K getFirstKeyValue(Map<E,K> map){ 
     K value = null; 
     if(map != null && map.size() > 0){ 
      Map.Entry<E,K> entry = map.entrySet().iterator().next(); 
      if(entry != null) 
       value = entry.getValue(); 
     } 
     return value; 
    } 

我用這個只有當我確定那map.size() == 1

相關問題