Java中Map的遍历方法

第一种:
Map map =newHashMap();
Iterator iter
=map.entrySet().iterator();
while(iter.hasNext()) {
Map.Entry entry
=(Map.Entry) iter.next();

Object key=entry.getKey();
Object val
=entry.getValue();
}
效率高,以后一定要使用此种方式!
第二种:
Map map
=newHashMap();
Iterator iter
=map.keySet().iterator();
while(iter.hasNext()) {
Object key
=iter.next();
Object val
=map.get(key);
}
效率低,以后尽量少使用!
HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,下面请看实例:
publicclassHashMapTest {
publicstaticvoidmain(String[] args) ...{
HashMap hashmap
=newHashMap();
for(inti=0; i<1000; i ) ...{
hashmap.put(
""i,"thanks");
}
longbs=Calendar.getInstance().getTimeInMillis();
Iterator iterator
=hashmap.keySet().iterator();
while(iterator.hasNext()) ...{
System.out.print(hashmap.get(iterator.next()));
}
System.out.println();
System.out.println(Calendar.getInstance().getTimeInMillis()
-bs);
listHashMap();
}
publicstaticvoidlistHashMap() ...{
java.util.HashMap hashmap
=newjava.util.HashMap();
for(inti=0; i<1000; i ) ...{
hashmap.put(
""i,"thanks");
}
longbs=Calendar.getInstance().getTimeInMillis();
java.util.Iterator it
=hashmap.entrySet().iterator();
while(it.hasNext()) ...{
java.util.Map.Entry entry
=(java.util.Map.Entry) it.next();
//entry.getKey() 返回与此项对应的键
//entry.getValue() 返回与此项对应的值
System.out.print(entry.getValue());
}
System.out.println();
System.out.println(Calendar.getInstance().getTimeInMillis()
-bs);
}
}
对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了 第一次,他把key和value都放到了entry中,所以就快了。

### JavaMap遍历方法 #### 使用 `entrySet()` 方法遍历键值对 `entrySet()` 返回映射中的映射关系集视图,允许同时访问键和值。这种方式通常被认为是最有效的方式之一。 ```java Map<String, Integer> map = new HashMap<>(); map.put("A", 1); map.put("B", 2); for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } ``` 这种方法提供了良好的性能并能直接获取到每一对键值[^1]。 #### 使用增强型 for 循环遍历 keyvalue 如果只需要访问所有的 keys 或者 values,则可以采用如下方式: 仅遍历 Key: ```java for (String key : map.keySet()) { System.out.println("Key = " + key); } ``` 仅遍历 Value: ```java for (Integer value : map.values()) { System.out.println("Value = " + value); } ``` 这两种情况分别通过调用 `keySet()` 和 `values()` 来实现,前者返回所有键组成的 Set 集合,后者则给出所有值构成的 Collection 集合。 #### 利用迭代器 Iterator 进行遍历 当需要更加灵活控制循环过程或者在多线程环境中工作时,可以选择使用显式的 Iterator 对象来进行遍历: ```java Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, Integer> entry = iterator.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); // 如果满足某些条件还可以在此处移除元素 if (someCondition) { iterator.remove(); } } ``` 此法不仅支持常规顺序读取数据项,还能够在必要时候安全地修改容器内的条目。 #### Lambda 表达式与 Stream API (适用于 JDK8 及以上版本) 对于较新的 Java 版本来说,利用 lambda 表达式配合 stream 流操作可以使代码更为简洁明了: ```java // 打印全部键值对 map.forEach((k, v) -> System.out.println("Key = " + k + ", Value = " + v)); // 转换成流再做进一步处理 map.entrySet() .stream() .forEach(entry -> System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue())); ``` 上述两种写法都体现了函数式编程的思想,在现代 Java 开发中被广泛采纳。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值