2012-07-19 93 views

回答

5

此代码将做到这一点:

public List<Object> getKeysFromValue(Map<?, ?> hm, Object value){ 
    List <Object>list = new ArrayList<Object>(); 
    for(Object o:hm.keySet()){ 
     if(hm.get(o).equals(value)) { 
      list.add(o); 
     } 
    } 
    return list; 
    } 
1

如果您知道密钥,则HashMap可帮助您找到值。如果你真的想从这个值中获得密钥,你将不得不遍历所有的项目,比较这些值,然后得到密钥。

2

在这里你去:

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

public class Test 
{ 
    public static void main(String args[]) 
    { 
     Map < Integer , Integer > map = new HashMap < Integer , Integer >(); 

     map.put(1 , 2); 
     map.put(3 , 4); 
     map.put(5 , 6); 
     map.put(7 , 4); 

     List<Integer> keys = new ArrayList<Integer>(); 

     Integer value = 4; 

     for (Integer key : map.keySet()) 
     { 
      if (map.get(key).equals(value)) 
      { 
       keys.add(key); 
      } 
     } 

     System.out.println(value + " has been found in the following keys: " + keys); 
    } 
} 

输出是:

4 has been found in the following keys: [7, 3] 
2
Set<Map.Entry> entries = hashMap.entrySet(); 
for(Map.Entry entry : entries) { 
    if(entry.getValue().equals(givenValue)) { 
     return entry.getKey(); 
    } 
} 
0

环比的entrySet是更快,因为您不会为每个键两次查询地图。

public Set<Object> getKeysFromValue(Map<Object, Integer> map, int value) { 
     Set<Object> keys = new HashSet<Object>(); 
     for (Map.Entry<Object, Integer> entry:map.entrySet()) { 
      //if value != null 
      if (entry.getValue() == value) { 
       keys.add(entry.getKey()); 
      } 
     } 
return keys; 
0

试试这个....简短而亲切的方式...

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

     for (Map.Entry<String, Integer> arr : list.entrySet()){ 


       System.out.println(arr.getKey()+" "+arr.getValue()); 
     }