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
英文地址,請注明出處:http://en.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…