JAVA中集合的遍历方式梳理

发布时间:2026/10/3 20:00:09
JAVA中集合的遍历方式梳理 思维导图集合遍历 ├── Collection 体系继承 Iterable │ ├── List │ │ ├── 遍历内容元素本身 │ │ └── 遍历语法迭代器 / 增强for / forEach / 普通fori要有索引 │ └── Set │ ├── 遍历内容元素本身 │ └── 遍历语法迭代器 / 增强for / forEach │ └── Map 体系不继承 Iterable独立接口 ├── 遍历内容 │ ├── 键keySet() │ ├── 值values() │ └── 键值对entrySet() └── 遍历语法 ├── 通过 keySet() / values() / entrySet() 拿到 Set 或 Collection 类型的对象 ├── 再用 Collection 的通用语法遍历迭代器 / 增强for / forEach └── Map 自己的 forEach(BiConsumer)一、Collection 体系Collection 包括 List 和 Set它们都继承了Iterable所以可以直接使用迭代器、增强 for、forEachListString list new ArrayList(); list.add(张三); list.add(李四); list.add(王五); ​ SetString set new HashSet(); set.add(张三); set.add(李四); set.add(王五);1.迭代器 IteratorIteratorString it list.iterator(); while (it.hasNext()) { String e it.next(); System.out.println(e); // 张三、李四、王五 }2.增强 for(底层集合走迭代器数组走普通 fori)for (String e : set) { System.out.println(e); // 张三、李四、王五 }3.forEach 方法Java 8​ // 匿名内部类写法 list.forEach(new ConsumerString() { Override public void accept(String e) { System.out.println(e); } }); ​ // Lambda 表达式写法 list.forEach(e - System.out.println(e)); ​ // 方法引用写法 list.forEach(System.out::println); ​来自Iterable.forEach(Consumer)接收1 个参数底层默认走增强 for迭代器ArrayList 等重写为 fori4.普通 fori仅 Listfor (int i 0; i list.size(); i) { String e list.get(i); System.out.println(e); // 张三、李四、王五 }Set 没有索引不能用二、Map 体系Map 没有继承Collection也没有继承Iterable不能直接用iterator()或 增强for 必须先通过三个方法拿到Set或Collection类型的对象遍历内容内容方法返回类型返回的是什么键keySet()SetK一个 Set 类型的对象里面装着所有 key值values()CollectionV一个 Collection 类型的对象里面装着所有 value键值对entrySet()SetMap.EntryK,V一个 Set 类型的对象里面装着所有键值对这三个方法返回的Set或Collection对象不是把数据复制一份打包出来的新集合它们直接基于 Map 内部已有的数据返回的集合对象和原 Map共享底层数据对返回的集合对象做删除原 Map 也会同步变化验证MapString, Integer map new HashMap(); map.put(张三, 20); map.put(李四, 22); map.put(王五, 25); ​ SetString keys map.keySet(); // 拿到一个 Set 对象 keys.remove(张三); // 通过它删除 System.out.println(map); // {李四22, 王五25}原 Map 同步变化如果是复制出来的新集合删掉keys里的张三原 Map 里应该还有张三。结果是原 Map 也没了证明它们共享数据遍历语法MapString, Integer map new HashMap(); map.put(张三, 20); map.put(李四, 22); map.put(王五, 25);先通过上面三个方法拿到Set或Collection对象再用 Collection 的通用语法遍历① 键找值SetString keySet map.keySet();//获取所有键的集合 for (String k : keySet ) { Integer v map.get(k); System.out.println(k v); } // 输出张三20、李四22、王五25map.keySet()返回SetK是 Collection 体系可以用增强 for② 键值对 entrySetSetMap.EntryString, Integer entrySet map.entrySet();//获取所有键值对对象的集合 for (Map.EntryString, Integer entry : entrySet) { String k entry.getKey(); Integer v entry.getValue(); System.out.println(k v); } // 输出张三20、李四22、王五25map.entrySet()返回SetMap.EntryK,V也是 Collection 体系 每个元素是一个键值对对象Map.Entry它本来就存在 Map 内部不是现场打包的新对象③ 只遍历值CollectionInteger values map.values();//获取所有值的集合 for (Integer v : values) { System.out.println(v); // 20、22、25 }map.values()返回CollectionV是 Collection 体系④ 迭代器方式IteratorMap.EntryString, Integer it map.entrySet().iterator(); while (it.hasNext()) { Map.EntryString, Integer entry it.next(); System.out.println(entry.getKey() entry.getValue()); } // 输出张三20、李四22、王五25entrySet()返回的 Set 对象有iterator()所以可以用迭代器⑤ Map 自己的 forEach// 匿名内部类写法 map.forEach(new BiConsumerString, Integer() { Override public void accept(String k, Integer v) { System.out.println(k v); } }); // Lambda 表达式写法 map.forEach((k, v) - System.out.println(k v)); // 输出张三20、李四22、王五25来自Map.forEach(BiConsumer)接收2 个参数

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询