(转)关于HashMap根据Value获取Key

来源:互联网 发布:网易邮箱数据库在线查 编辑:程序博客网 时间:2024/05/22 01:36

原地址:http://www.cnblogs.com/DreamDrive/p/4673183.html


关于我对java中集合的总结有如下三篇:

关于JDK中的集合总结(一)

关于JDK中的集合总结(二)

关于JDK中的集合总结(三)

关于数组集合之间的转换

Map中是一个key有且只有一个value.

但是一个value可以对应多个key值.

一般都是通过key,然后map.get(key)获得到value.

如果想要反向想通过value获得key的值,提供一下两种方法:

方法一:

package cn.itcast.mapgetkey;import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class HashMapDemo {    //根据value值获取到对应的一个key值    public static String getKey(HashMap<String,String> map,String value){        String key = null;        //Map,HashMap并没有实现Iteratable接口.不能用于增强for循环.        for(String getKey: map.keySet()){            if(map.get(getKey).equals(value)){                key = getKey;            }        }        return key;        //这个key肯定是最后一个满足该条件的key.    }        //根据value值获取到对应的所有的key值    public static List<String> getKeyList(HashMap<String,String> map,String value){        List<String> keyList = new ArrayList();        for(String getKey: map.keySet()){            if(map.get(getKey).equals(value)){                keyList.add(getKey);            }        }        return keyList;    }        public static void main(String[] args) {        HashMap<String,String> map = new HashMap();        map.put("CHINA", "中国");        map.put("CN", "中国");        map.put("AM", "美国");        //获取一个Key        System.out.println("通过value获取Key:"+getKey(map,"中国"));//输出"CN"        System.out.println("通过value获取Key:"+getKey(map,"美国"));//输出"AM"        //获得所有的key值        System.out.println("通过value获取所有的key值:"+getKeyList(map,"中国"));//输出"[CHINA, CN]"            }}

 方法二:

package cn.itcast.mapgetkey2;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;public class MapValueGetKey {    HashMap<String, String> map = null;    public MapValueGetKey(HashMap<String, String> map) {        this.map = map;    }    public static void main(String[] args) {        HashMap<String, String> map = new HashMap<String, String>();        map.put("1", "a");        map.put("2", "b");        map.put("3", "c");        map.put("4", "c");        map.put("5", "e");        MapValueGetKey mapValueGetKey = new MapValueGetKey(map);        System.out.println(mapValueGetKey.getKey("c"));//输出[3, 4]    }    private ArrayList<String> getKey(String value) {        ArrayList<String> keyList = new ArrayList<String>();        String key = null;        Set<Entry<String, String>> set = map.entrySet();// entrySet()方法就是把map中的每个键值对变成对应成Set集合中的一个对象.        // set对象中的内容如下:[3=c, 2=b, 1=a, 5=e, 4=c]        Iterator it = set.iterator();        while (it.hasNext()) {            Map.Entry<String, String> entry = (Map.Entry<String, String>) it.next();            // entry中的内容就是set集合中的每个对象(map集合中的一个键值对)3=c....            // Map.Entry就是一种类型,专值map中的一个键值对组成的对象.            if (entry.getValue().equals(value)){                key = (String) entry.getKey();                keyList.add(key);            }        }        return keyList;    }}

原创粉丝点击