Java Map遍历方法详解:For-Each与EntrySet、KeySet
需积分: 15 108 浏览量
更新于2024-09-14
收藏 4KB TXT 举报
本文介绍了在Java中遍历Map的多种方法,包括使用迭代器和Java 1.5引入的For-Each循环。Map遍历对于理解和操作Map中的数据至关重要。
1. 传统迭代器方式遍历Map
通过调用`map.entrySet().iterator()`获取Map的迭代器,然后在循环中使用`hasNext()`和`next()`方法逐个获取`Map.Entry`对象,从而得到键值对。例如:
```java
Map map = new HashMap();
Iterator<Map.Entry<Object, Object>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Object, Object> entry = it.next();
Object key = entry.getKey();
Object value = entry.getValue();
}
```
2. 使用KeySet遍历Map
可以先调用`map.keySet()`获取键的集合,然后遍历这个集合,再用`map.get(key)`获取对应的值。如:
```java
for (Object key : map.keySet()) {
Object value = map.get(key);
}
```
或者使用迭代器:
```java
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
String value = (String) map.get(key);
}
```
3. Java 1.5引入的For-Each循环
Java 1.5引入了For-Each循环,简化了遍历集合的操作。对于Map,可以使用`entrySet()`或`keySet()`配合For-Each循环,如下所示:
```java
for (Map.Entry<Object, Object> entry : map.entrySet()) {
Object key = entry.getKey();
Object value = entry.getValue();
}
```
或者:
```java
for (Object key : map.keySet()) {
Object value = map.get(key);
}
```
4. 遍历HashTable
对于`Hashtable`,遍历方式与`HashMap`类似,但需要注意`Hashtable`是线程安全的,适合多线程环境。
5. 遍历TreeMap并保持内部排序
`TreeMap`按照键的自然顺序或自定义比较器排序。遍历`TreeMap`时,依然可以通过`entrySet()`、`keySet()`或For-Each循环进行:
```java
for (Map.Entry<Object, Object> entry : treeMap.entrySet()) {
Object key = entry.getKey();
Object value = entry.getValue();
}
```
6. 遍历过程中添加和删除元素
在遍历Map时,不建议在循环内部添加或删除元素,因为这可能会导致迭代器抛出`ConcurrentModificationException`。如果需要动态操作,建议使用`Iterator`的`remove()`方法或使用`CopyOnWriteArrayList`等线程安全的数据结构。
Java提供了多种遍历Map的方式,开发者可以根据实际需求选择合适的方法。在遍历过程中,尤其要注意集合的并发修改问题,确保代码的稳定性和安全性。
2011-10-09 上传
2009-05-29 上传
2010-06-11 上传
2008-06-22 上传
2011-06-11 上传
2013-07-28 上传
2009-06-15 上传
2019-04-28 上传
2010-12-02 上传
hongzhipeng999
- 粉丝: 0
- 资源: 2
最新资源
- myilportfolio
- GH1.25连接器封装PCB文件3D封装AD库
- Network-Canvas-Web:网络画布的主要网站
- 基于机器学习和LDA主题模型的缺陷报告分派方法的Python实现。原论文为:Accurate developer r.zip
- ReactBlogProject:Blog项目,测试模块,React函数和后端集成
- prefuse-caffe-layout-visualization:杂项 BVLC Caffe .prototxt 实用程序
- thresholding_operator:每个单元基于阈值的标志值
- 基于深度学习的计算机视觉(python+tensorflow))文件学习.zip
- app-sistemaweb:sistema web de citas medicasRuby在轨道上
- 记录书籍学习的笔记,顺便分享一些学习的项目笔记。包括了Python和SAS内容,也包括了Tableau、SPSS数据.zip
- bpm-validator:Bizagi BPM 验证器
- DocBook ToolKit-开源
- file_renamer:通过文本编辑器轻松重命名文件和文件夹
- log4j-to-slf4j-2.10.0-API文档-中文版.zip
- django-advanced-forms:Django高级脆皮形式用法示例
- android-sispur