
java中规定map集合中key值必须唯一,value值可以重复,所以通过value来找key可能会出现一个value对应多个key的情况,API中也没有通过value寻找key的方法,所以只能通过自己的方法来获得key值
Map<Integer,String> map=new HashMap<Integer,String>();mapput(1, "一");
mapput(2, "二");
mapput(3, "三");
mapput(4, "二");
String k="二";
Set<Integer> set=mapkeySet();
for(Integer str:set){
if(kequals(mapget(str))){
Systemoutprintln(str);
}
}
获取map的key和value的方法分为以下两种形式:
1、mapkeySet():先获取map的key,然后根据key获取对应的value;
2、mapentrySet():同时查询map的key和value,只需要查询一次;
注意:当map的value值相等时,根据key值进行排序
很多人都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率。
两种方法对比测试如下:
HashMap测试数据:
TreeMap测试数据:
扩展资料:
mapkeySet()和mapEntrySet()的比较:
一、如果使用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
List<Date>
dateList
=
map
keySet()
stream()
sorted(Comparatorcomparing(Date::getTime)reversed())
collect(CollectorstoList());
mapget(dateListget(4));
可以对map中的键进行排序,将键存在一个List中,然后根据mapgetKey()获取值,key通过之前存储的List获取
以上就是关于java用map通过value能找到key吗全部的内容,包括:java用map通过value能找到key吗、如何通过获取map中的key来获得与key对应的value值,进行运算、java 怎么样获取Map中第几个键值对等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)