如何通过获取map中的key来获得与key对应的value值,进行运算

 我来答
含光君06
推荐于2019-09-13 · TA获得超过1.5万个赞
知道答主
回答量:5
采纳率:0%
帮助的人:1237
展开全部

获取map的key和value的方法分为以下两种形式:

1、map.keySet():先获取map的key,然后根据key获取对应的value;

2、map.entrySet():同时查询map的key和value,只需要查询一次;

注意:当map的value值相等时,根据key值进行排序

很多人都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率。

两种方法对比测试如下:

HashMap测试数据:

TreeMap测试数据:

扩展资料:

map.keySet()和map.EntrySet()的比较:

一、如果使用HashMap

1、同时遍历key和value时,keySet与entrySet方法的性能差异取决于key的具体情况,如复杂度(复杂对象)、离散度、冲突率等。换言之,取决于HashMap查找value的开销。

entrySet一次性取出所有key和value的操作是有性能开销的,当这个损失小于HashMap查找value的开销时,entrySet的性能优势就会体现出来。

在比测试中,当key是最简单的数值字符串时,keySet可能反而会更高效,耗时比entrySet少10%。总体来说还是推荐使用entrySet。

因为当key很简单时,其性能或许会略低于keySet,但却是可控的;而随着key的复杂化,entrySet的优势将会明显体现出来。当然,我们可以根据实际情况进行选择

2、只遍历key时,keySet方法更为合适,因为entrySet将无用的value也给取出来了,浪费了性能和空间。在上述测试结果中,keySet比entrySet方法耗时少23%。

3、只遍历value时,使用vlaues方法是最佳选择,entrySet会略好于keySet方法。

二、如果使用TreeMap

1、同时遍历key和value时,与HashMap不同,entrySet的性能远远高于keySet。这是由TreeMap的查询效率决定的,也就是说,TreeMap查找value的开销较大,明显高于entrySet一次性取出所有key和value的开销。因此,遍历TreeMap时强烈推荐使用entrySet方法。

2、只遍历key时,keySet方法更为合适,因为entrySet将无用的value也给取出来了,浪费了性能和空间。在上述测试结果中,keySet比entrySet方法耗时少24%。

3、只遍历value时,使用vlaues方法是最佳选择,entrySet也明显优于keySet方法。

参考资料:

百度百科——Map

帐号已注销
高粉答主

2021-04-03 · 说的都是干货,快来关注
知道大有可为答主
回答量:1.8万
采纳率:74%
帮助的人:513万
展开全部
获取map的key和value的方法分为两种形式:

map.keySet():先获取map的key,然后根据key获取对应的value;

map..entrySet():同时查询map的key和value,只需要查询一次;

以下是获取map的key和value,以及map里面的元素通过key或者value来比较大小并排序;

注意:当map的value值相等时,根据key值进行排序

java根据Map的值62616964757a686964616fe59b9ee7ad9431333366303861(value)取键(key) 的实现方法有4种,分别为:

(1)使用for循环遍历

(2)使用Iterator迭代器

(3)使用KeySet迭代

(4)使用EnterySet迭代

下面为以上4种方法具体实现的代码:

1、使用for循环遍历

public static Object getKey(HashMap map, String v) {
String key = "";

for (Map.Entry m :map.entrySet()) {
if (m.getValue().equals(v)) {
key = m.getKey();

}}

return key;

}

2.1 循环法

循环法就是通过遍历Map里的Entry,一个个比较,把符合条件的找出来。会有三种情况:

(1)找到一个值
(2)找到多个值
(3)找不到
具体代码如下:

想特别说的一点是,在对比是否相等的时候,使用了Objects.equals(a, b)方法,而不是用a.equals(b)方法。这样可以避免空指针异常。

2.2 Stream方法

Stream总是在多种集合操作上都能提供优雅直观的方法,易写易理解。通过一个过滤器,即可把满足相等条件的值取出来,代码如下:

2.3 Guava的BiMap

Google的Guava提供了BiMap这样一个双向Map,调用inverse()方法会返回一个反向的关联的BiMap,然后便可以通过get()方法获取key值了。

代码如下:

需要注意的是,BiMap作为一个双向的Map,它不能存储多对一的关系;而HashMap是可以的。其实很好理解,因为是双向的,所以即要满足Key值的唯一性,也要满足Value值的唯一性。如果往里存放同样的Value,会抛异常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
an0011121
推荐于2017-10-10 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3948
采纳率:55%
帮助的人:2342万
展开全部
hm已是一个HashMap的引用。
如果你知道当前的这个key,可以通过hm.get(key)方法来获得value。
获得key的方法hm.keySet();因为你不知道key是哪个其实该方法就是获得一个key的集合。

具体可以结合以下例子看看,里面有个迭代器用于遍历的。
Set<Integer> s=hm.keySet();//通过keySet方法可获得所有key的集合,放在一个容器Set里面。
Iterator<Integer> it=s.iterator();//获得一个迭代器引用it,通过s.iterator方法好比使“指针”指向
//set里面的第一个元素的位置
while(it.hasNext())//set里面如果有下一个
{
Integer key=it.next();//返回当前set中的这个元素(因为set中都是放的key,“指针”指向下一个
System.out.println(hm.get(key));//利用hm.get(key)方法获得该key对应的value
}
更多追问追答
追问
谢谢你,那请问如果我要通过jcombobox下拉框中选择一个选项,该选项与hm中某一个的key值相同,再从hm中提取与key值相对应的value,代码该怎么写呢?理解我的意思么?
追答
这个下拉框中你选择的是一个key,这个key你是可以得到的。
然后加一个监听器,如果选择这个key的框框。
那么就可以用hm.get(key)返回类型就是你的key的数据类型。
来自:求助得到的回答
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式