hashmap中key值是唯一的,但value是不唯一的,所以是没有办法通过像get(key)取value值一样,直接取key的 值。
所以当map中没有重复值时,根据value取得key是唯一的,但是要自己写一个方法来读取。
当有重复值时,取得第一个匹配的值,由于是HashMap,顺序不可预测,不推荐使用以下方法。
例子1:
- private static HashMap<String, String> processMap =new HashMap<String, String>();
- public static String getProcessCdByName(String name){
- String result = null;
- Set<Map.Entry<String, String>> set = processMap.entrySet();
- for(Map.Entry<String, String> entry : set){
- if(entry.getValue().equals(name)){
- result = entry.getKey();
- break;
- }
- }
- return result;
- }
- /*请问:如何能通过hashmap的某一value来返回其对应的键值key啊?(新手入门困惑) */
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- public class Value2Key {
- //待反查的Map数据成员
- private Map<Object,Object> map=new HashMap<Object,Object>();
- //构造方法
- public Value2Key(Map<Object,Object> map){
- this.map=map;
- }
- //反查
- public List<Object> getKeys(Object value){
- ArrayList<Object> keys=new ArrayList<Object>();
- for(Entry<Object,Object> entry:this.map.entrySet()){
- if(value.equals(entry.getValue())){
- keys.add(entry.getKey());
- }else{
- continue;
- }
- }
- return keys;
- }
- //测试代码
- public static void main(String[] args) {
- HashMap<Object, Object> map = new HashMap<Object, Object>();
- map.put(1, "a");
- map.put(2, "d");
- map.put(3, "a");
- map.put(4, "b");
- map.put(5, "a");
- //构造反查器实例
- Value2Key searcher=new Value2Key(map);
- for(Object obj:searcher.getKeys("a")){
- System.out.println(obj);
- }
- }
- }
控制台结果:
1
3
5