2017-09-05 28 views
-2

打印指定的值相同的條目,比如我有以下我的HashMap,鍵(整數)和值(整數也):如何獲得和HashMap的

HashMap <Integer, Integer> mymap = new HasHmap <>(); 
mymap.put(1, 3); 
mymap.put(2, 4); 
mymap.put(3, 1); 
mymap.put(4, 5); 
mymap.put(5, 2); 

打印輸出:match found! [1,3] [3,1]

是否有可能在我的HashMap中查找並打印這樣的比賽?你能教我如何?

+1

究竟是什麼你想達到什麼目的?並請添加一些你已經嘗試過的代碼 – Jonathan

+0

嗯是的,這是可能的。只需查看[API](https://docs.oracle.com/javase/8/docs/api/java/util/Map.html)。 – Mena

回答

0

下面是代碼,但是你可以用類似樣的辦法解決方法。

輸出是

1 - > 3

3 - > 1

import java.util.HashMap; 
import java.util.Map.Entry; 
import java.util.Set; 

class GfG { 
    public static void main(String[] args) { 
     HashMap<Integer, Integer> map = new HashMap<>(); 
     map.put(1, 3); 
     map.put(2, 3); 
     map.put(5, 3); 
     map.put(3, 1); 
     map.put(6, 3); 
     Set<Entry<Integer, Integer>> entry = map.entrySet(); 
     for(Entry<Integer, Integer> e: entry){ 
      int key = e.getKey(); 
      int value = e.getValue(); 
      if(map.containsKey(value) && map.get(value) != null && map.get(value) == key){ 
       System.out.println(key +" -> "+value); 
      } 
     } 
    } 
} 
+0

非常感謝!雖然我理解流程,但你能解釋我設置 = HashMap.entrySet();和if()語句,我只是在哈希映射的學習曲線的條件:d – RYREN

1

是的,這很簡單,只要:

// loop over every entry 
for (Entry<Integer, Integer> entry : mymap.entrySet()) { 
    // look up for current value, and check if it is equal to the key 
    if (mymap.get(entry.getValue()).equals(entry.getKey())) { 
     // it's a match! 
     System.out.println("[" + entry.getKey() + ", " + entry.getValue() + "]"); 
     // stop after first match (asked in comments) 
     break; 
    } 
} 

這將輸出:

[1, 3] 
+0

確定這是更清潔和感謝:d,如果例如我有超過1場比賽,我只想打印第1匹配發現了什麼? – RYREN

+0

只需添加一個'break'語句,看看我編輯的答案。 – Jonathan

+0

@RYREN爲什麼它不再是公認的答案?另一種是較慢的方式(3個查找,而不是一個),包含無用代碼,並且使用''==物體打擊,它是[錯](https://stackoverflow.com/a/28953839/)。 – Jonathan