-
2018-02-07 10:15:21
要新年了,提前祝大家新年快乐,一帆风顺,万事如意,阖家欢乐!
上一篇文章中已经说过:HashMap的参数的拼接
http://blog.csdn.net/willba/article/details/79268387这篇主要是说 根据特定的Value值,获取对应的key值,如下
//封装假数据 HashMap<String,String> map = new HashMap<>(); map.put("keyOne","valueOne"); map.put("keyTwo","valueTwo"); map.put("keyThree","valueThree"); String newStr = ""; String str = valueTwo.00; //截取小数点前面的数据 String data = str.substring(0,str.indexOf("."); //循环HashMap内的对象 在根据value值进行操作 for(Map.Entry<String,String> mapEntry : map.entrySet()){ if(map.getValue().equals(data)){ newStr = map.getKey(); } }
以上!就是这样…
更多相关内容 -
HashMap根据value获取key值
2020-12-22 08:47:30下面我们来根据value获取key,根据key获取value(1.foreach循环遍历 2.迭代器遍历) 举一个例子会更生动! 题目 创建一个Map集合,在集合中放入年份、世界杯冠军获得的国家。存储的键值对例如:“1994”,“巴西”;... -
HashMap的遍历(利用key获取value)
2019-07-22 16:41:51import java.util.HashMap; import java.util.Map; import java.util.Set; public class better { public static void main(String[] args){ Map<String, String> map=new HashMap<String,S...package study;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class better {
public static void main(String[] args){
Map<String, String> map=new HashMap<String,String>();
map.put(“201901”,“chen”);
map.put(“201902”, “huang”);
map.put(“201903”, “zhang”);
Set keys=map.keySet();
for (String key : keys) {
String value=map.get(key);
System.out.println(key+"—"+value);
}
}
}
-
HashMap中通过key获取value源码剖析
2018-08-09 19:00:07public V get(Object key) { if (key == null) return getForNullKey(); Entry<K,V> entry = getEntry(key); return null == entry ? null : entry.getValue(); } ...public V get(Object key) { if (key == null) return getForNullKey(); Entry<K,V> entry = getEntry(key); return null == entry ? null : entry.getValue(); } private V getForNullKey() { if (size == 0) { return null; } for (Entry<K,V> e = table[0]; e != null; e = e.next) { if (e.key == null) return e.value; } return null; }
这段代码我大致是这么理解的,首先传递一个key过来,判断这个key是否存在,如果key为null,会走getForNullKey方法,getForNullKey进来之后会继续判断他的长度是否为0,如果为0的情况那么会反回空到控制台, 否者会获取table[0]上面的entry,然后会返回entry上面key为null的value到控制台;
final Entry<K,V> getEntry(Object key) { if (size == 0) { return null; } int hash = (key == null) ? 0 : hash(key); for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) return e; } return null; }
这段代码大致意思是,如果key不等于null,会根据这个key的哈希值,再到table数组里面找到对应的下标,获取entry;下面的e = e.next;我理解的意思是如果发生了哈希碰撞,那么一个位置可能会存在多个entry,那么多个entry的哈希值肯定是相同.然后自定义了一个Object k 变量;下面先把entry.key赋值给了k;再与传递过来的key进行的对比,如果相等的话就会返回entry;返回的entry从新回到了get()方法中,然后就可以通过这个entry.getValue()获取到他的value值返回到控制台了.
-
hashmap如何根据key找到value?
2019-09-02 16:38:081、hashmap如何根据key找到value? 首先新建一个Node用于接收查询出来的Node节点 hash(key)计算其hash码,并传入到getNode()方法中 ,根据hash码和对应的key找到对应的节点 public V get(Object key)...1、hashmap如何根据key找到value?
-
首先新建一个Node用于接收查询出来的Node节点
-
hash(key)计算其hash码,并传入到getNode()方法中 ,根据hash码和对应的key找到对应的节点
public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), key)) == null ? null : e.value; }
-
我们先看Node, 可知这是一个实现Map.Entry的内部类
static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next;
-
这是其中的一些方法,总结:Node是一个节点,为Key,Value形式。
-
然后我们来看getNode()
-
TODO 红黑树中如何查找
final Node<K,V> getNode(int hash, Object key) { Node<K,V>[] tab; Node<K,V> first, e; int n; K k; //新建一个Node类型链表数组,新建一个first if ((tab = table) != null && (n = tab.length) > 0 && // tab 指向hash表,n为hash表的长度,first为桶中(链表数组)的第一个节点 (first = tab[(n - 1) & hash]) != null) { //当hash表中不为空并且头一个节点也不是null的时候 if ( first.hash == hash && // always check first node ((k = first.key) == key || (key != null && key.equals(k)) ) ) //如果头结点的hash码等于要找的hash码,并且对一个的key也是相等的话,就直接返回头节点 return first; if ((e = first.next) != null) { //头节点下一个不是null if (first instanceof TreeNode) //如果是红黑树存储,就去红黑树里面找 return ((TreeNode<K,V>)first).getTreeNode(hash, key); // 不是红黑树存储的话 do { //遍历hash表,直到找到与对应结点的hash码值和对应key值相等的为止,并返回 if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) return e; } while ((e = e.next) != null); } } return null; }
总结:
-
首先根据要查找的key计算出对应的哈希码
-
然后通过哈希码找到对应哈希表中桶中的地址
-
然后判断桶是链表结构还是红黑树结构
-
普通链表直接遍历链表查找即可
-
红黑树TODO
-
-
-
关于HashMap根据Value获取Key
2021-09-15 17:30:10Map 中是一个 key有且只有一个value,但是一个value可以对应多个key值,一般都是通过key,然后... //根据value值获取到对应的key值 public static String getKey(HashMap<String, String> map, String value) { S. -
HashMap根据value获取key
2021-09-10 15:23:38HashMap<String, String> map = new HashMap<>(); map.put("1","3"); map.put("2","2"); map.put("3","1"); String key = null; for(String getKey: map.keySet()){ if(map.get(getKey -
hashmap通过value获取key值
2018-10-15 16:06:11前言:此方法用于value...//根据value值获取到对应的一个key值 public static String getKey(LinkedHashMap<String,String> map,String value){ String key = null; //Map,HashMap并没有实现Iter... -
Java根据key值修改Hashmap中的value值
2022-05-05 00:09:38如果原来map中没有key,会创建,如果原来有key,会使用value 覆盖掉原来的值 map.put(key,value); 这个实现对原值加一(前提是有这个key) map.put(key,map.get(key)+1); 以下可以获取key对应的value,如果没有... -
(转)关于HashMap根据Value获取Key
2017-09-18 15:14:03原地址; 关于我对java中集合的总结有如下三篇: 关于JDK中的集合总结(一) 关于JDK中的集合总结(二) ...但是一个value可以对应多个key值. 一般都是通过key,然后map.get(key)获得到value. 如果想要反向 -
获取hashmap中的key和value的方法
2021-01-04 20:47:11occurrences = new HashMap<Integer, Integer>(); //进行遍历 for (Map.Entry<Integer, Integer> entry : occurrences.entrySet()) { int num = entry.getKey(), count = entry.getValue(); } 其中 num... -
HashMap遍历key值和value值的几种方法
2021-04-24 22:57:49package com.qst.netty04; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; import lombok.extern.slf4j.Slf4j; import java.util.*;... HashMap<... map = new HashMap<String, I -
hashmap中根据key和value的值排序
2021-11-23 20:18:21本文总结hashmap分别根据key值和value值排序的方法。 一、根据key排序 hashmap是无序的。 当所有key的hash的最大值<数组的长度-1时,HashMap可以将存入的元素按照key的hash从小到大排序。这个后期我会从源码的... -
Java 关于HashMap根据value反向获取key值
2017-03-23 13:10:31但是一个value可以对应多个key值. 一般都是通过key,然后map.get(key)获得到value. 如果想要反向通过value获得key的值,提供以下方法: package com.jglz.qing.map; import java.util.ArrayList; import java... -
java HashMap通过value反查key的代码示例
2020-09-04 22:09:45本文讲解了java HashMap通过value反查key的方法,直接提供代码供大家参考使用 -
map通过Key获取Value值
2019-01-07 18:01:00Map, String> map = new HashMap, String>(); map.put(3, "小王"); map.put(4, "小宋"); map.put(1, "小白"); map.put(2, "小陈"); for (Student student : arrayList) { student.setName(map.get... -
java里面获取map的key和value的方法
2021-02-12 11:43:20获取map的key和value的方法分为两种形式:map.keySet():先获取map的key,然后根据key获取对应的value;map..entrySet():同时查询map的key和value,...注意:当map的value值相等时,根据key值进行排序public class ... -
hashMap 中key和value互换
2020-11-03 17:33:06如果value作为key值出现复情况,留在原HashMap (变最a)中,最后打印出变量a和b集合的数量, 存放有数据的原HashMap HashMap<String,String> a = new HashMap<String,String>; 互换后的HashMap HashMap... -
HashMap如何获取key值对应的索引的(JDK1.8)?
2020-02-18 17:54:27HashMap中的put方法获取key值对应索引的大致相关源码: //put方法 public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } //hash方法 static final int hash(Object key) { int... -
hashMap分别获取所有key和value
2017-10-12 10:28:23//去除value中重复值,相同值仅仅保留一个 Set<Integer> valuesSimple=new HashSet(); for(int i:values){ valuesSimple.add(i); } Iterator<Integer> iterator3=valuesSimple.iterator(); while (iterator3.... -
HashMap遍历key和value的两种方式
2019-03-11 17:51:00\\获取key和value的set while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); \\把hashmap转成Iterator再迭代到entry Object key = entry.getKey(); \\从entry获取key Object val = entry.... -
HashMap通过VALUE反向求KEY的方法
2012-02-24 09:31:07HashMap中的值是成对地放置的,即VALUE-KEY.因此我们一般在MAP中取出数据时得根据KEY来取出VALUE.但若我们想出VALUE值,但却不知对应地KEY,这时我们就得先遍历VALUE值,找出对应地KEY值,再根据KEY值取出VALUE值 -
【数据结构】:hashmap如何根据value值查找对应的key值
2021-04-15 01:21:10import java.util.HashMap; import java.util.Map; public class Main{ public static void main(String[] args) { HashMap<Integer,Integer>... //key---value map.put(1,2); map.put(2,3); map. -
HashMap相同key累加value的问题
2019-12-03 14:36:25import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { Map<String, Long> map = new HashMap<String, Long>(); map.put("k", 1L); m...