Java集合遍历练习题

以下是10道难度递增的集合遍历练习题,涵盖ListSetMap的各种遍历方式,包含解题思路、代码实现和输出结果:

练习题1:基础遍历 - ArrayList的for-each遍历

题目:创建一个存储5个字符串的ArrayList(元素为"Red"、“Green”、“Blue”、“Yellow”、“Purple”),使用增强for循环(for-each)遍历并打印所有元素。

解题思路
  1. 初始化ArrayList并添加元素。
  2. 使用for-each循环遍历集合,直接获取每个元素并打印。
代码实现
import java.util.ArrayList;
import java.util.List;public class Exercise1 {public static void main(String[] args) {// 1. 初始化集合List<String> colors = new ArrayList<>();colors.add("Red");colors.add("Green");colors.add("Blue");colors.add("Yellow");colors.add("Purple");// 2. for-each遍历System.out.println("所有颜色:");for (String color : colors) {System.out.println(color);}}
}
输出结果
所有颜色:
Red
Green
Blue
Yellow
Purple

练习题2:索引遍历 - ArrayList的普通for循环

题目:创建一个存储整数的ArrayList(元素为10、20、30、40、50),使用普通for循环(带索引)遍历,打印每个元素的索引和值(格式:索引x: 值y)。

解题思路
  1. 初始化ArrayList并添加整数元素。
  2. 利用size()获取集合长度,通过索引i遍历,用get(i)获取元素。
代码实现
import java.util.ArrayList;
import java.util.List;public class Exercise2 {public static void main(String[] args) {// 1. 初始化集合List<Integer> numbers = new ArrayList<>();numbers.add(10);numbers.add(20);numbers.add(30);numbers.add(40);numbers.add(50);// 2. 普通for循环(带索引)System.out.println("元素索引和值:");for (int i = 0; i < numbers.size(); i++) {System.out.println("索引" + i + ": " + numbers.get(i));}}
}
输出结果
元素索引和值:
索引0: 10
索引1: 20
索引2: 30
索引3: 40
索引4: 50

练习题3:迭代器遍历 - ArrayList的Iterator遍历与删除

题目:创建一个ArrayList存储字符串(元素为"Apple"、“Banana”、“Cherry”、“Banana”、“Date”),使用Iterator遍历,删除所有"Banana",最后打印剩余元素。

解题思路
  1. 初始化ArrayList并添加元素(包含重复的"Banana")。
  2. 获取Iterator对象,遍历过程中判断元素是否为"Banana",若是则用it.remove()删除。
  3. 遍历结束后打印剩余元素。
代码实现
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Exercise3 {public static void main(String[] args) {// 1. 初始化集合List<String> fruits = new ArrayList<>();fruits.add("Apple");fruits.add("Banana");fruits.add("Cherry");fruits.add("Banana");fruits.add("Date");// 2. Iterator遍历并删除"Banana"Iterator<String> it = fruits.iterator();while (it.hasNext()) {String fruit = it.next();if ("Banana".equals(fruit)) {it.remove(); // 用迭代器删除,避免ConcurrentModificationException}}// 3. 打印剩余元素System.out.println("删除Banana后:" + fruits);}
}
输出结果
删除Banana后:[Apple, Cherry, Date]

练习题4:双向遍历 - LinkedList的ListIterator

题目:创建一个LinkedList存储字符串(元素为"First"、“Second”、“Third”、“Fourth”),使用ListIterator先向后遍历所有元素,再向前遍历所有元素。

解题思路
  1. 初始化LinkedList并添加元素。
  2. 获取ListIterator对象,用hasNext()next()向后遍历。
  3. 遍历到末尾后,用hasPrevious()previous()向前遍历。
代码实现
import java.util.LinkedList;
import java.util.ListIterator;public class Exercise4 {public static void main(String[] args) {// 1. 初始化集合LinkedList<String> steps = new LinkedList<>();steps.add("First");steps.add("Second");steps.add("Third");steps.add("Fourth");// 2. ListIterator向后遍历ListIterator<String> lit = steps.listIterator();System.out.println("向后遍历:");while (lit.hasNext()) {System.out.println(lit.next());}// 3. ListIterator向前遍历System.out.println("向前遍历:");while (lit.hasPrevious()) {System.out.println(lit.previous());}}
}
输出结果
向后遍历:
First
Second
Third
Fourth
向前遍历:
Fourth
Third
Second
First

练习题5:Set遍历 - HashSet的for-each遍历

题目:创建一个HashSet存储整数(元素为3、1、4、1、5、9、2、6),使用for-each遍历并打印(观察去重和无序特性)。

解题思路
  1. 初始化HashSet并添加元素(包含重复值)。
  2. 用for-each遍历,打印元素(验证HashSet自动去重且无序)。
代码实现
import java.util.HashSet;
import java.util.Set;public class Exercise5 {public static void main(String[] args) {// 1. 初始化集合(含重复元素)Set<Integer> nums = new HashSet<>();nums.add(3);nums.add(1);nums.add(4);nums.add(1); // 重复元素,不会被存储nums.add(5);nums.add(9);nums.add(2);nums.add(6);// 2. for-each遍历System.out.println("HashSet元素(去重且无序):");for (int num : nums) {System.out.print(num + " ");}}
}
输出结果
HashSet元素(去重且无序):
1 2 3 4 5 6 9 

练习题6:有序Set遍历 - TreeSet的遍历与Lambda

题目:创建一个TreeSet存储字符串(元素为"Orange"、“Apple”、“Banana”、“Grape”),分别用for-each和Java 8的forEach(Lambda)遍历,观察有序特性。

解题思路
  1. 初始化TreeSet并添加元素(字符串会按自然顺序排序)。
  2. 先用for-each遍历打印。
  3. 再用forEach方法结合Lambda表达式遍历打印。
代码实现
import java.util.TreeSet;public class Exercise6 {public static void main(String[] args) {// 1. 初始化集合TreeSet<String> fruits = new TreeSet<>();fruits.add("Orange");fruits.add("Apple");fruits.add("Banana");fruits.add("Grape");// 2. for-each遍历(自然排序)System.out.println("for-each遍历:");for (String fruit : fruits) {System.out.println(fruit);}// 3. Java 8 forEach(Lambda)System.out.println("Lambda遍历:");fruits.forEach(fruit -> System.out.println(fruit));}
}
输出结果
for-each遍历:
Apple
Banana
Grape
Orange
Lambda遍历:
Apple
Banana
Grape
Orange

练习题7:Map遍历1 - HashMap的keySet遍历

题目:创建一个HashMap存储学生姓名和分数(键值对:"Alice"→95,"Bob"→88,"Charlie"→92),使用keySet()遍历所有键,再通过键获取值并打印(格式:姓名: 分数)。

解题思路
  1. 初始化HashMap并添加键值对。
  2. keySet()获取所有键的集合,遍历键并通过get(key)获取对应值。
代码实现
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class Exercise7 {public static void main(String[] args) {// 1. 初始化MapMap<String, Integer> studentScores = new HashMap<>();studentScores.put("Alice", 95);studentScores.put("Bob", 88);studentScores.put("Charlie", 92);// 2. keySet()遍历Set<String> names = studentScores.keySet();System.out.println("学生分数:");for (String name : names) {int score = studentScores.get(name);System.out.println(name + ": " + score);}}
}
输出结果
学生分数:
Alice: 95
Bob: 88
Charlie: 92

练习题8:Map遍历2 - HashMap的entrySet遍历

题目:使用上题的HashMap,通过entrySet()遍历所有键值对(Map.Entry),打印姓名和分数(效率高于keySet())。

解题思路
  1. 复用练习题7的HashMap
  2. entrySet()获取所有键值对的集合,遍历Map.Entry对象,直接通过getKey()getValue()获取键和值。
代码实现
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class Exercise8 {public static void main(String[] args) {// 1. 初始化MapMap<String, Integer> studentScores = new HashMap<>();studentScores.put("Alice", 95);studentScores.put("Bob", 88);studentScores.put("Charlie", 92);// 2. entrySet()遍历(推荐,效率更高)Set<Map.Entry<String, Integer>> entries = studentScores.entrySet();System.out.println("学生分数(entrySet):");for (Map.Entry<String, Integer> entry : entries) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}
输出结果
学生分数(entrySet):
Alice: 95
Bob: 88
Charlie: 92

练习题9:有序Map遍历 - TreeMap的遍历与统计

题目:创建一个TreeMap存储商品名称和价格(键值对:"笔记本"→5999,"手机"→3999,"平板"→2999),遍历并打印所有商品,同时计算总价。

解题思路
  1. 初始化TreeMap并添加键值对(key会按自然顺序排序)。
  2. entrySet()遍历,打印商品信息,累加价格计算总价。
代码实现
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;public class Exercise9 {public static void main(String[] args) {// 1. 初始化TreeMapTreeMap<String, Double> products = new TreeMap<>();products.put("笔记本", 5999.0);products.put("手机", 3999.0);products.put("平板", 2999.0);// 2. 遍历并统计总价double total = 0.0;Set<Map.Entry<String, Double>> entries = products.entrySet();System.out.println("商品列表(按名称排序):");for (Map.Entry<String, Double> entry : entries) {String name = entry.getKey();double price = entry.getValue();System.out.println(name + ": " + price + "元");total += price;}System.out.println("总价:" + total + "元");}
}
输出结果
商品列表(按名称排序):
平板: 2999.0元
手机: 3999.0元
笔记本: 5999.0元
总价:12997.0元

练习题10:集合嵌套遍历 - Map嵌套List

题目:创建一个HashMap<String, List<Integer>>,键为班级名称(“一班”、“二班”),值为该班级学生的分数列表(一班:[90, 85, 92];二班:[88, 95, 80])。遍历该集合,打印每个班级的名称、学生分数及平均分。

解题思路
  1. 初始化HashMap,为每个班级创建List存储分数并添加到Map
  2. 遍历MapentrySet(),获取每个班级的分数列表。
  3. 遍历分数列表,打印分数并计算总和,最后计算平均分。
代码实现
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;public class Exercise10 {public static void main(String[] args) {// 1. 初始化嵌套集合Map<String, List<Integer>> classScores = new HashMap<>();// 一班分数List<Integer> class1 = new ArrayList<>();class1.add(90);class1.add(85);class1.add(92);classScores.put("一班", class1);// 二班分数List<Integer> class2 = new ArrayList<>();class2.add(88);class2.add(95);class2.add(80);classScores.put("二班", class2);// 2. 遍历嵌套集合Set<Map.Entry<String, List<Integer>>> entries = classScores.entrySet();for (Map.Entry<String, List<Integer>> entry : entries) {String className = entry.getKey();List<Integer> scores = entry.getValue();System.out.println("班级:" + className);System.out.print("  分数:");int sum = 0;for (int score : scores) {System.out.print(score + " ");sum += score;}double avg = (double) sum / scores.size();System.out.println("\n  平均分:" + avg);System.out.println("-----");}}
}
输出结果
班级:一班分数:90 85 92 平均分:89.0
-----
班级:二班分数:88 95 80 平均分:87.0
-----

难度总结

  • 基础(1-2):掌握List的for-each和普通for循环遍历,理解索引的作用。
  • 进阶(3-4):学会IteratorListIterator的使用,包括遍历中删除元素和双向遍历。
  • 中级(5-6):熟悉Set的遍历特性(去重、有序/无序),掌握Lambda遍历方式。
  • 高级(7-9):掌握Map的多种遍历方式(keySetentrySet),理解TreeMap的有序性及统计功能。
  • 综合(10):能处理集合嵌套结构(Map嵌套List),结合多层遍历解决实际问题。

通过这些练习,可全面掌握Java集合的遍历技巧及适用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94630.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习·ZegclipClip-RC

Zegclip 获取图像的特殊编码&#xff1a;使用prompt tuning的技术&#xff0c;目的是减少过拟合和计算量。调整文本编码&#xff1a;使用RD关系描述符&#xff0c;将每一个文本对应的[cls] token和图像对应的[cls] token作哈密顿积&#xff0c;最后文本[cls]token形式化任务 文…

Taro 扩展 API 深度解析与实战指南

Taro 扩展 API 深度解析与实战指南 Taro 作为一款优秀的多端开发框架&#xff0c;提供了一系列强大的扩展 API&#xff0c;这些 API 极大地提升了开发效率和应用的可维护性。本文将深入解析 Taro 的扩展 API&#xff0c;并根据其功能特性进行分类讲解&#xff0c;帮助开发者更…

容器之王--Docker的部署及基本操作演练

1.2 部署docker 1.2.1 容器工作方法1.2.2 部署第一个容器 官方站点&#xff1a;https://docs.docker.com/ 1.2.2.1 配置软件仓库 ]# cd /etc/yum.repos.d ]# vim docker.repo [docker] name docker-ce baseurl https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/sta…

VFTO与局部放电-高压设备绝缘系统的双重挑战与防护策略

目录 引言VFTO的定义与形成机理VFTO对高压设备绝缘系统的影响局部放电的危害与机制VFTO与局部放电的关联性分析检测与监测技术防护与抑制措施未来技术发展趋势结论与展望引言 在现代电力系统中&#xff0c;超快速暂态过电压&#xff08;Very Fast Transient Overvoltage, VFTO&…

Windows下Rust编码实现MP4点播服务器

Rust编码可以实现众多简洁、可靠、高效的应用&#xff0c;但语法逻辑要求严格&#xff0c;尤其是依赖库的选择调用&#xff0c;需要耐心坚持“推敲”。借助DeepSeek并反复编程调试和问答改进&#xff0c;可以最终得到完整有效的Rust编码。下面分享Windows下Rust编码实现MP4点播…

ubuntu-相关指令

1、串口1.1确认在系统中检查设备是否正常加载&#xff0c;在终端输入以下命令&#xff1a;way1&#xff1a;ll /dev | grep ttyUSB&#xff08;ll是LL的小写&#xff09; way2&#xff1a;ll /dev | grep ttyACM way3&#xff1a;ll /dev | grep ttyCH343USB&#…

docker容器临时文件去除,服务器容量空间

概述&#xff1a; 接到告警提醒&#xff0c;服务器容量不足&#xff0c;去查看了一下&#xff0c;发现确实100g左右容量已基本用完&#xff1b;分析&#xff1a; 1&#xff09;查看根目录下哪些文件夹占用容量较大 使用命令“ du -ah --max-depth1 / ” 查看目标目录下所有文件…

损耗对信号质量的影响

损耗通常分为介质损耗与导体损耗&#xff1a;介质损耗&#xff1a;介质被施加电场后介质内部带电粒子在外加电场的作用力下进行微小移动介质损耗与频率成正比导体损耗&#xff1a;导体由于存在电阻&#xff0c;在有电流流过时产生的热量造成的损耗为导体损耗。同时&#xff0c;…

【42】【OpenCV C++】 计算图像某一列像素方差 或 某一行像素的方差;

文章目录1 要使用到的函数 和 原理1.1 cv::meanStdDev 函数详解——计算均值和标准差1 .2 方差的通俗解释2 代码实现3 问题3.1 入口参数const cv::Mat& img 和 const cv::Mat img区别项目要求&#xff1a;C OPenCV 中 图像img ,当 string ROIdirection “H”时&#xff0c;…

元图 CAD 插件化革命:突破效率瓶颈,重构智能协作新范式

在建筑、机械、机电等工程领域&#xff0c;传统CAD软件的功能固化与场景割裂已成为效率提升的瓶颈。设计师常面临“通用工具难适配专业需求”、“跨平台协作效率低下”、“数据孤岛阻碍创新”等痛点。元图CAD凭借“场景插件化“核心技术&#xff0c;以模块化能力突破行业桎梏&a…

T:归并排序

归并排序.逆序对简介.归并排序.习题.逆序对简介 \;\;\;\;\;\;\;\;简单介绍一下归并排序的原理&#xff0c;逆序对的基本概念&#xff0c;然后收集相关的练习。 直接用一个基础问题来引入。 因此知道了: \;\;\;\;\;\;\;\;逆序对就是一对数满足 i<j&&nums[i]>nu…

三极管三种基本放大电路:共射、共集、共基放大电路

文章目录一、共集放大电路1.静态分析2.动态分析二、共基放大电路1.静态分析2.动态分析总结如何判断共射、共集、共基放大电路&#xff1f; 电路的输入回路与输出回路以发射极为公共端的电路称为共射放大电路。 电路的输入回路与输出回路以集电极为公共端的电路称为共集放大电路…

Function AI 助力用户自主开发 MCP 服务,一键上云高效部署

作者&#xff1a;靖苏 在 AI 与云原生协同创新的浪潮下&#xff0c;多模型、多场景智能应用日益普及。开发者面临的首要挑战&#xff0c;是如何实现模型之间、服务之间的高效协同&#xff0c;以及如何便捷地将自主研发能力拓展到云端&#xff0c;形成灵活可扩展的智能服务。MC…

c++编译环境安装(gcc、cmake)

一、gcc下载 下载地址&#xff1a;https://ftp.gnu.org/gnu/gcc/ 选择想要下载的版本&#xff0c;然后解压&#xff0c;查看 contrib/download_prerequisites 中的依赖。 以我下载的 gcc-7.3.0 为例&#xff0c; 二、安装依赖包 【gmp】 https://ftp.gnu.org/gnu/gmp/ 【is…

基于贝叶斯的营销组合模型实战案例(PyMC实践)

文章出自&#xff1a;基于营销预算优化的媒体投入分配研究 本篇技术亮点在于结合了广告饱和度和累积效应&#xff0c;通过数学模型和数值优化方法&#xff0c;精确计算电视与数字媒体的最佳预算分配比例&#xff0c;实现增量销售最大化。该方法适合有多渠道广告投放需求、预算…

react_05create-react-app脚手架详细解析(export)

脚手架是什么&#xff1f; 是一种工具:快速生成项目的工程化结构&#xff0c;让项目从搭建到开发&#xff0c;到部署&#xff0c;整个流程变得快速和便捷。 安装过程: 1.安装node,安装完成后验证版本,出现对应版本就表示成功 node --version npm --version2.React脚手架默认是使…

Uncaught TypeError: Illegal invocation

报错信息Uncaught TypeError: Illegal invocation关键代码$.operate.post(prefix "/edit", { "taskId": taskId, "taskStatus": completed });<input id"taskId" style"display: none;">[[${completeTask.taskId}]]&…

深入解析Go设计模式:责任链模式实战

什么是责任链模式? 责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它通过构建处理者链来传递请求。每个处理者既能自行决定是否处理当前请求,也可将请求转交给后续处理者。该模式的核心优势在于解耦请求发送方与处理方,使多个对象都能获得处理请求的机…

机器视觉系统工业相机的成像原理及如何选型

机器视觉系统是一种模拟人类视觉功能&#xff0c;通过光学装置和非接触式传感器获取图像数据&#xff0c;并进行分析和处理&#xff0c;以实现对目标物体的识别、测量、检测和定位等功能的智能化系统。其目的是让机器能够理解和解释视觉信息&#xff0c;从而做出决策或执行任务…

Java如何快速实现短信登录?

全文目录&#xff1a;开篇语前言1. 短信登录的工作原理2. 短信登录的优点3. 短信登录的缺点4. 短信登录的实现示例&#xff1a;使用 Java 实现短信登录的流程4.1 发送短信验证码&#xff08;伪代码&#xff09;4.2 使用第三方短信平台发送短信&#xff08;以阿里云为例&#xf…