关于HashMap根据Value获取Key
关于我对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;
- }
- }
关于HashMap根据Value获取Key的更多相关文章
- HashMap根据value获取key值
public static String getCityId(HashMap<String,String> citys, String city){ Set set = citys.ent ...
- java map遍历、排序,根据value获取key
Map 四种遍历: Map<String,String> map = new HashMap<String, String>(); map.put("one" ...
- Map四种获取key和value值的方法,以及对map中的元素排序(转)
获取map的值主要有四种方法,这四种方法又分为两类,一类是调用map.keySet()方法来获取key和value的值,另一类则是通过map.entrySet()方法来取值,两者的区别在于,前者主要是 ...
- php array 根据value获取key,in_array()判断是否在数组内实例
php array 根据value获取key,in_array()判断是否在数组内实例 <?php header("Content-type: text/html; charset=u ...
- Java Map获取key和value 以及String字符串转List方法
一.问题描述 这里描述两个问题: 1.Java Map获取key和value的方法: 2.String字符串转List的方法: 二.解决方法 1.Java Map获取key和value的方法 2. ...
- PHP JSON文件解析并获取key、value,判断key是否存在
/****************************************************************************** * PHP JSON文件解析并获取key ...
- com.alibaba.fastjson和org.json遍历获取key
推荐都是用fastjson.org.json好像不支持序列化. com.alibaba.fastjson遍历获取key的方法: //fastjson解析方法 for (Map.Entry<Str ...
- JedisCluster获取key所在的节点
JedisCluster获取key所在的节点 2019年11月9日17:34:55 准备 引入jedis的jar包,这个jar包里面包含了JedisCluster,可以用它来操作集群. <dep ...
- hashmap 实现 相同的key值时,value值叠加效果。
一,了解一些基础 package com.ohs.demo; /** * * 一.需求是:停止相同的key值,覆盖效果,将重复的value值,叠加起来. * * 二.hash? 什么是hash? * ...
随机推荐
- Java缓存学习之二:浏览器缓存机制
浏览器端的九种缓存机制介绍 浏览器缓存是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存 ...
- POJ 1679 The Unique MST (最小生成树)
The Unique MST 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/J Description Given a conn ...
- iOS学习之基本概念
学习iOS最重要的是态度和兴趣,如果你对于学习始终抱有不断的热情和端正的态度,那么,无论是什么,你总会成功的! 有一句话与大家共勉:过程中跌倒多少次都没有关系,重要的是,跌倒后你能够站起来重新寻找正确 ...
- Codeforces Round #332 (Div. 二) B. Spongebob and Joke
Description While Patrick was gone shopping, Spongebob decided to play a little trick on his friend. ...
- ucGUI 12864 从打点起
ucGUI是纯C写的的,移植需要定义点阵数,颜色数,和画点函数 以下是ucGUI 12864下的移植 基于ST7920控制的12864液晶用于字符显示很方便的,但网友说用它显示图形并不合适,原因就 ...
- UVa 1629 Cake slicing (记忆化搜索)
题意:一个矩形蛋糕上有好多个樱桃,现在要做的就是切割最少的距离,切出矩形形状的小蛋糕,让每个蛋糕上都有一个樱桃,问最少切割距离是多少. 析:很容易知道是记忆化搜索,我们用dp[u][d][l][r]来 ...
- Windows安全模式的妙用
使用计算机的老手一定对windows安全模式不陌生,在删除病毒,卸载顽固软件,或者系统维护时,Windows的安全模式肯定会帮助很大,下面电脑技术就说说Windows安全模式的作用以及用处. wind ...
- iOS 中的UIWindow
使用Xcode新建一个工程后,Xcode会自动新建一些文件,其中有AppDelegate.h,AppDelegate.m,ViewController.h,ViewController.m,Main. ...
- setbuffer和freopen做一个简单的日志组件
目标场景是这样的: 多线程的应用程序要频繁打一些小字节的日志,也不想引用很重的日志库. 设想了一个极其简单的日志组件,main线程中重定向stdout到文件,同时setbuffer设置一个10k的缓冲 ...
- 线程暴长~Quartz中创建Redis频繁后导致线程暴长
在最近项目开发过程中,在进行任务调度处理过程中,出现了一个问题,它的线程数暴长,从20多个可以到1000多个,如果你的服务器性能好的话,可以到10000多个,太恐怖了,就算你的服务再好,早晚有一天也会 ...