2017-09-05 23 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