java如何遍历map的所有的元素

java如何遍历map的所有的元素,第1张

package netnietest; import javautilHashMap; import javautilIterator; import javautilMap; public class HashMapTest { private static Map<Integer, String> map=new HashMap<Integer,String>(); / 1HashMap 类映射不保证顺序;某些映射可明确保证其顺序: TreeMap 类 2在遍历Map过程中,不能用mapput(key,newVal),mapremove(key)来修改和删除元素, 会引发 并发修改异常,可以通过迭代器的remove(): 从迭代器指向的 collection 中移除当前迭代元素 来达到删除访问中的元素的目的。 / public static void main(String[] args) { mapput(1,"one"); mapput(2,"two"); mapput(3,"three"); mapput(4,"four"); mapput(5,"five"); mapput(6,"six"); mapput(7,"seven"); mapput(8,"eight"); mapput(5,"five"); mapput(9,"nine"); mapput(10,"ten"); Iterator<MapEntry<Integer, String>> it = mapentrySet()iterator(); while(ithasNext()){ MapEntry<Integer, String> entry=itnext(); int key=entrygetKey(); if(key%2==1){ Systemoutprintln("delete this: "+key+" = "+key); //mapput(key, "奇数"); //ConcurrentModificationException //mapremove(key); //ConcurrentModificationException itremove(); //OK } } //遍历当前的map;这种新的for循环无法修改map内容,因为不通过迭代器。 Systemoutprintln("-------nt最终的map的元素遍历:"); for(MapEntry<Integer, String> entry:mapentrySet()){ int k=entrygetKey(); String v=entrygetValue(); Systemoutprintln(k+" = "+v); } } }

List<Date>

dateList

=

map

keySet()

stream()

sorted(Comparatorcomparing(Date::getTime)reversed())

collect(CollectorstoList());

mapget(dateListget(4));

可以对map中的键进行排序,将键存在一个List中,然后根据mapgetKey()获取值,key通过之前存储的List获取

获取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

Java中遍历Map对象的4种方法:

1、通过MapentrySet遍历key和value,在for-each循环中使用entries来遍历推荐,尤其是容量大时。

2、通过MapkeySet遍历key,通过键找值value遍历(效率低),普遍使用,二次取值。

3、如果只需要map中的键或者值,你可以通过MapkeySet或Mapvalues来实现遍历,而不是用entrySet。在for-each循环中遍历keys或values。

4、通过MapentrySet使用iterator遍历key和value。

扩展资料:

关于JAVA的遍历知识补充:

1、list和set集合都实现了Iterable接口,所以他们的实现类可以使用迭代器遍历,map集合未实现该接口,若要使用迭代器循环遍历,需要借助set集合。

2、使用EntrySet 遍历,效率更高。

参考资料:

百度百科--Map(映射)

以上就是关于java如何遍历map的所有的元素全部的内容,包括:java如何遍历map的所有的元素、java 怎么样获取Map中第几个键值对、如何通过获取map中的key来获得与key对应的value值,进行运算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9612015.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存