Java程序設計實驗6 | 集合類

*本文是博主對Java各種實驗的再整理與詳解,除了代碼部分和解析部分,一些題目還增加了拓展部分(?)。拓展部分不是實驗報告中原有的內容,而是博主本人自己的補充,以方便大家額外學習、參考。

(解析部分還沒加,過陣子補)

目錄

一、實驗目的

二、實驗內容

1、將下列數據:“hello”、123、6.9、“hello”、“”、“Hello”、StringBuffer s=new StringBuffer(“hello”)中的s,添加到一個ArrayList對象中。

2、使用ArrayList集合,向集合中添加10個整數,并使用Iterator遍歷該集合,并查找鍵盤輸入的元素。

3、分別利用Arraylist和Set隨機生成十個不重復的隨機整數,隨機整數范圍為350到450。

4、集合中不容許有重復的對象,對于多個重復對象只能添加一次。例如在HashSet集合中添加三個Person對象,把姓名相同的人當做同一個人,雖然可以添加多次但集合里只保留一個,但是這對類的設計是有要求的,假設Person類中只包含name和age屬性,則需要重寫hashCode()方法和equals()方法,如果兩個對象的name相同,則hashCode()方法的返回值相同,equals()方法返回true。

5、編寫程序將一組學生對象的姓名和成績存入到一個樹集(TreeSet)中。

6、編寫一個程序,讀取個數不定的整數,然后查找其中出現頻率最高的數字。要求通過鍵盤輸入數據,當輸入為0時,表示結束輸入。如: 如果輸入的數據是2 ??3 ??40 ??3 ??54 ??-3 ??3 ??3 ??2 ??0,那么數字3的出現頻率是最高的。如果出現頻率最高的數字不是一個而是多個,則應該將它們全部輸出。例如當數據是9 ?30 ?3 ?9 ?3 ?2 ?4時,3和9都出現了兩次,3和9都應該輸出。

7、選擇合適的Map集合保存5個用戶的用戶名和密碼,然后將這些鍵值對打印出來。

8、(選做)統計字符串中每個單詞出現的次數,使用HashMap來實現。例如:“Today, We have a class of java, as we kown, java is an object oriented ?programming language, and java is fun! wish you enjoy it!”.

9、(選做)500個人圍成一個圈,從1開始報數,數到3的倍數的人離開圈子,循環往復,直到最后圈子只剩下一人為止,求剩下的人原來在圈子的位置。

三、實驗總結


一、實驗目的

1、掌握容器類的層次結構;

2、掌握Collection接口和List接口的常用方法;

3、掌握Iterator接口的使用方式;

4、掌握Set接口和hashCode的使用方式;

5、掌握Map接口的使用方式。


二、實驗內容

1、將下列數據:“hello”、123、6.9、“hello”、“”、“Hello”、StringBuffer s=new StringBuffer(“hello”)中的s,添加到一個ArrayList對象中。

? 將ArrayList中的所有元素打印輸出。

? 查找元素“hello”。

? 刪除指定的元素“hello”。

? 將元素123替換為1000。

源代碼:

import java.util.ArrayList;public class S6_1 {public static void main(String[] args) {// 創建ArrayList對象ArrayList<Object> list = new ArrayList<>();// 添加數據到ArrayListlist.add("hello");list.add(123);list.add(6.9);list.add("hello");list.add("");list.add("Hello");StringBuffer s = new StringBuffer("hello");list.add(s);// 打印輸出所有元素System.out.println("ArrayList中的所有元素為:");for (Object element : list) {System.out.print(element + ",");}System.out.println("\n========================");// 查找元素“hello”boolean found = list.contains("hello");if (found) {System.out.println("找到元素\"hello\"");} else {System.out.println("未找到元素\"hello\"");}System.out.println("\n========================");// 刪除指定的元素“hello”list.remove("hello");System.out.println("刪除元素\"hello\"后的ArrayList:");for (Object element : list) {System.out.println(element + ",");}System.out.println("\n========================");// 將元素123替換為1000int index123 = list.indexOf(123);if (index123 != -1) {list.set(index123, 1000);System.out.println("將元素123替換為1000后的ArrayList:");for (Object element : list) {System.out.println(element);}} else {System.out.println("未找到元素123");}}
}

列出測試數據和實驗結果截圖:?

2、使用ArrayList集合,向集合中添加10個整數,并使用Iterator遍歷該集合,并查找鍵盤輸入的元素。

提示:

? 使用add()方法將元素添加到ArrayList集合中。

? 調用集合的iterator()方法獲得Iterator對象,并調用Iterator的hasNext()和next()方法,迭代出集合中的所有元素,完成查找功能,并將重復的元素刪除。

源代碼:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;public class S6_2 {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();// 1-向集合中添加10個隨機整數for (int i = 0; i < 10; i++) {list.add(new Random().nextInt(10));}System.out.println(list);// 2-使用Iterator遍歷集合并查找鍵盤輸入的元素Iterator<Integer> iterator = list.iterator();Scanner reader = new Scanner(System.in);System.out.print("請輸入要查找的整數:");int input = reader.nextInt();// 3-去重int count = 0;while (iterator.hasNext()) {int current = iterator.next();if (current == input) {count++;System.out.println("找到第" + count + "個元素 " + input);if(count > 1)iterator.remove(); // 刪除重復的元素}}// 打印刪除重復元素后的集合System.out.println("刪除重復元素后的ArrayList:");System.out.println(list);}
}

列出測試數據和實驗結果截圖:

3、分別利用Arraylist和Set隨機生成十個不重復的隨機整數,隨機整數范圍為350到450。

源代碼:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;public class S6_3 {public static void main(String[] args) {// 使用 ArrayList 生成不重復的隨機整數ArrayList<Integer> arrayList = generateRandomNumbersArrayList();System.out.println("ArrayList中的隨機數:");System.out.println(arrayList);// 使用 Set 生成不重復的隨機整數Set<Integer> set = generateRandomNumbersSet();System.out.println("Set中的隨機數:");System.out.println(set);}// 生成 ArrayList 中的隨機整數private static ArrayList<Integer> generateRandomNumbersArrayList() {ArrayList<Integer> arrayList = new ArrayList<>();Random random = new Random();while (arrayList.size() < 10) {int randomNumber = random.nextInt(101) + 350; // 生成350到450的隨機數if (!arrayList.contains(randomNumber)) {arrayList.add(randomNumber);}}return arrayList;}// 生成 Set 中的隨機整數private static Set<Integer> generateRandomNumbersSet() {Set<Integer> set = new HashSet<>();Random random = new Random();while (set.size() < 10) {int randomNumber = random.nextInt(101) + 350; // 生成350到450的隨機數set.add(randomNumber);     //因為Set內置去重功能,故添加后無需判斷}return set;}
}

列出測試數據和實驗結果截圖:

4、集合中不容許有重復的對象,對于多個重復對象只能添加一次。例如在HashSet集合中添加三個Person對象,把姓名相同的人當做同一個人,雖然可以添加多次但集合里只保留一個,但是這對類的設計是有要求的,假設Person類中只包含name和age屬性,則需要重寫hashCode()方法和equals()方法,如果兩個對象的name相同,則hashCode()方法的返回值相同,equals()方法返回true。

源代碼:

import java.util.HashSet;
import java.util.Objects;class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}// Getters and setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// 重寫 hashCode 方法@Overridepublic int hashCode() {return Objects.hash(name);}// 重寫 equals 方法@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null || getClass() != obj.getClass()) {return false;}Person person = (Person) obj;return Objects.equals(name, person.name);}
}public class S6_4 {public static void main(String[] args) {HashSet<Person> personSet = new HashSet<>();// 添加三個 Person 對象,其中兩個 name 相同Person person1 = new Person("碳基肥宅", 25);Person person2 = new Person("熱心網友wyd", 30);Person person3 = new Person("碳基肥宅", 28);personSet.add(person1);personSet.add(person2);personSet.add(person3);// 打印 HashSet 中的元素數量System.out.println("HashSet 中的元素數量:" + personSet.size());for (Person person : personSet) {System.out.println(person.getName() + " : " + person.getAge());}}
}

列出測試數據和實驗結果截圖:

5、編寫程序將一組學生對象的姓名和成績存入到一個樹集(TreeSet)中。

完成以下要求:

? 使得按照成績自動降序排列,并輸出排序的結果。

源代碼:

import java.util.Comparator;
import java.util.TreeSet;// 學生類
class Student {private String name;private int score;public Student(String name, int score) {this.name = name;this.score = score;}// Getterspublic String getName() {return name;}public int getScore() {return score;}@Overridepublic String toString() {return name + " : " + score;}
}public class S6_5 {public static void main(String[] args) {// 創建 TreeSet 并指定降序排序的比較器TreeSet<Student> studentSet = new TreeSet<>(Comparator.comparingInt(Student::getScore).reversed());// 向 TreeSet 中添加學生對象studentSet.add(new Student("碳基肥宅", 85));studentSet.add(new Student("熱心網友wyd", 75));studentSet.add(new Student("叮當同學", 92));studentSet.add(new Student("朵拉", 68));// 輸出排序結果(按照成績降序)System.out.println("按照成績降序排列的學生信息:");for (Student student : studentSet) {System.out.println(student);}}
}

列出測試數據和實驗結果截圖:

6、編寫一個程序,讀取個數不定的整數,然后查找其中出現頻率最高的數字。要求通過鍵盤輸入數據,當輸入為0時,表示結束輸入。如: 如果輸入的數據是2 ??3 ??40 ??3 ??54 ??-3 ??3 ??3 ??2 ??0,那么數字3的出現頻率是最高的。如果出現頻率最高的數字不是一個而是多個,則應該將它們全部輸出。例如當數據是9 ?30 ?3 ?9 ?3 ?2 ?4時,3和9都出現了兩次,3和9都應該輸出。

提示:可以利用集合的元素不能重復這一特性。

源代碼:

import java.util.*;public class S6_6 {public static void main(String[] args) {Scanner reader = new Scanner(System.in);Map<Integer, Integer> map = new HashMap<>();System.out.println("請輸入整數(輸入0結束輸入):");int input;while ((input = reader.nextInt()) != 0) {map.put(input, map.getOrDefault(input, 0) + 1);}// 找出最大頻率int maxFrequency = Collections.max(map.values());// 輸出出現最大頻率的數字System.out.println("出現頻率最高的數字是:");for (Map.Entry<Integer, Integer> entry : map.entrySet()) {if (entry.getValue() == maxFrequency) {System.out.print(entry.getKey());}}}
}

列出測試數據和實驗結果截圖:

也可以用PriorityQueue完成,感興趣的朋友可以試試,具體的實現過陣子補在這里。

7、選擇合適的Map集合保存5個用戶的用戶名和密碼,然后將這些鍵值對打印出來。

源代碼:

import java.util.HashMap;
import java.util.Map;public class S6_7 {public static void main(String[] args) {// 創建一個 HashMap 來保存用戶名和密碼Map<String, String> userCredentials = new HashMap<>();// 添加用戶的用戶名和密碼userCredentials.put("user1", "password1");userCredentials.put("user2", "password2");userCredentials.put("user3", "password3");userCredentials.put("user4", "password4");userCredentials.put("user5", "password5");// 打印用戶名和密碼的鍵值對System.out.println("用戶名和密碼的鍵值對:");for (Map.Entry<String, String> entry : userCredentials.entrySet()) {System.out.println("用戶名: " + entry.getKey() + ", 密碼: " + entry.getValue());}}
}

列出測試數據和實驗結果截圖:

8、(選做)統計字符串中每個單詞出現的次數,使用HashMap來實現。例如:“Today, We have a class of java, as we kown, java is an object oriented ?programming language, and java is fun! wish you enjoy it!”.

統計結果存儲成以下形式:

a-->1

an-->1

and-->1

as-->1……

is-->2

提示:使用String.split(("[ \n\t\r.,;:!?()]")方法進行分詞。

源代碼:

import java.util.HashMap;
import java.util.Map;public class S6_8 {public static void main(String[] args) {String text = "Today, We have a class of java, as we kown, java is an object oriented programming language, and java is fun! wish you enjoy it!";// 去除標點符號并分割字符串為單詞String[] words = text.split("[ \n\t\r.,;:!?()]");// 創建 HashMap 來存儲單詞及其出現的次數Map<String, Integer> wordCount = new HashMap<>();// 統計單詞出現的次數for (String word : words) {word = word.toLowerCase(); // 將單詞轉換為小寫if (!word.isEmpty()) {wordCount.put(word, wordCount.getOrDefault(word, 0) + 1);}}// 打印每個單詞及其出現的次數System.out.println("每個單詞出現的次數:");for (Map.Entry<String, Integer> entry : wordCount.entrySet()) {System.out.println(entry.getKey() + "-->" + entry.getValue());}}
}

列出測試數據和實驗結果截圖:

9、(選做)500個人圍成一個圈,從1開始報數,數到3的倍數的人離開圈子,循環往復,直到最后圈子只剩下一人為止,求剩下的人原來在圈子的位置。

提示:可以使用集合(ArrayList)或隊列(Deque)實現。

源代碼:

這個問題其實是著名的約瑟夫問題(Josephus problem),可以用遞推的方式求解。

以下是使用隊列(Deque)來模擬這個問題并求解最后剩下的人在原來圈子的位置:

import java.util.ArrayDeque;
import java.util.Deque;public class S6_9 {public static void main(String[] args) {int totalPeople = 500;int count = 3;Deque<Integer> circle = new ArrayDeque<>();// 初始化圈子,編號從1到500for (int i = 1; i <= totalPeople; i++) {circle.addLast(i);}// 開始循環報數,直到圈子中只剩一個人為止while (circle.size() > 1) {for (int i = 0; i < count - 1; i++) {int person = circle.removeFirst();circle.addLast(person);}circle.removeFirst(); // 數到3的倍數的人離開圈子}// 打印最后剩下的人在原來圈子的位置System.out.println("最后剩下的人在原來圈子的位置是:" + circle.peek());}
}

列出測試數據和實驗結果截圖:


實驗總結

在這個實驗中我學到了很多關于集合類、循環和算法的知識,這些練習加深了我對集合、字符串處理和算法設計的理解。通過這些題目,我學會了:

  1. 掌握了ArrayList、HashSet、TreeSet、HashMap 等集合類的基本操作,包括添加、刪除、遍歷和使用鍵值對等。
  2. 學會了使用 split() 方法分割字符串,以及在字符串中搜索特定的內容。
  3. 理解了為了在集合中正確比較和存儲自定義對象,需要重寫 hashCode() 和 equals() 方法的重要性。
  4. 解決了一些經典問題,比如約瑟夫問題,提高了算法思維和編碼能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209441.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209441.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209441.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于ssm的大型商場會員管理系統論文

摘 要 進入信息時代以來&#xff0c;很多數據都需要配套軟件協助處理&#xff0c;這樣可以解決傳統方式帶來的管理困擾。比如耗時長&#xff0c;成本高&#xff0c;維護數據困難&#xff0c;數據易丟失等缺點。本次使用數據庫工具MySQL和編程框架SSM開發的大型商場會員管理系統…

【漏洞復現】FLIR AX8紅外線熱成像儀命令執行漏洞

漏洞描述 eledyne FLIR 設計、開發、制造以及強大的傳感和意識技術。自透射熱圖像、可見光圖像、可見頻率分析、來自測量和診斷的先進威脅測量系統以及日常生活的創新解決方案。 Teledyne FLIR 提供多種產品用于政府、國防、工業和商業市場。我們的產品,緊急救援人員,軍事人…

插入排序與希爾排序(C語言實現)

1.插入排序 由上面的動圖可以知道插入排序的邏輯就是從第一個元素開始往后遍歷&#xff0c;如果找到比前一個元素小的&#xff08;或者大的&#xff09;就往前排&#xff0c;所以插入排序的每一次遍歷都會保證前面的數據是有序的&#xff0c;接下類用代碼進行講解。 我們這里傳…

bash中通過變量中的內容獲取對應的關聯數組

bash中通過變量中的內容獲取對應的關聯數組 Bash declare 手冊&#xff1a; https://phoenixnap.com/kb/bash-declare 實際問題&#xff1a; 在 bash 中創建了多個關聯數組&#xff0c;需要根據輸入的值&#xff0c;獲取不同的關聯數組。 可以使用 if 進行多次判斷&#xff…

智能優化算法應用:基于浣熊算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于浣熊算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于浣熊算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.浣熊算法4.實驗參數設定5.算法結果6.參考文獻7.MATLAB…

解決HTTP錯誤500.19 - internal server error -內部服務器錯誤的終極指南

在開發和維護網絡應用程序時&#xff0c;難免會遇到各種HTTP錯誤代碼。其中&#xff0c;HTTP錯誤500.19 - 內部服務器錯誤可謂是最令人頭痛的問題之一。當你的應用程序遇到這個錯誤時&#xff0c;它似乎就像一道墻壁&#xff0c;擋住了你前進的道路。但別擔心&#xff0c;本篇技…

Git全局設置命令---設置提交人姓名

介紹 使用git命令設置提交人姓名 命令 git config --global user.name "超音速"

react-photo-view 的介紹、安裝、使用。

目錄 基本介紹 安裝 使用 基本介紹 react-photo-view 是一個基于 React 的圖片查看器組件&#xff0c;用于在網頁上展示和瀏覽圖片。該組件提供了用戶友好的界面和交互&#xff0c;可以輕松地在應用程序中集成并使用。 支持觸摸手勢&#xff0c;拖動/平移/物理效果滑動…

修改移遠提供的GobiNet、quectel-CM源碼,使其支持有方N720 4G模塊

最近在研究imx6ull linux下4G模塊驅動的移植&#xff0c;參考的移遠ec20的移植方法&#xff0c;添加了GobiNet驅動&#xff0c;編譯了quectel-CM工具&#xff0c;并且可以正常撥號&#xff0c;分配到ip&#xff0c;如下&#xff1a; ping外網也沒有壓力&#xff0c;如下…

軟件工程 考試重點

結構化分析 考慮數據和處理的需求分析方法&#xff0c;稱為結構分析方法&#xff08;SA&#xff09; 結構化分析基于 分解、抽象 的基本思想 分解&#xff1a;對于復雜的系統&#xff0c;為將復雜度降低到可以掌握的程度&#xff0c;可以把大問題分解為若干個小問題&#xf…

【go-zero】go-zero使用ent框架 如何使用源生sql完成查詢

背景 本篇教程我們采用的是go-zero的快速腳手架工具 simple-admin 框架的開發 github地址:https://github.com/suyuan32/simple-admin-core 因為框架推薦使用Ent 這篇教程我們則對Ent的基本使用的幾種形式進行一個總結 一、開啟ent的源生sql 1、simple-admin生成rpc 【go-…

QT 中 線程池 (備查)

QRunnable類 API 1&#xff09;在Qt中使用線程池需要先創建任務&#xff0c;添加到線程池中的每一個任務都需要是一個 QRunnable 類型&#xff0c;因此在程序中需要創建子類繼承 QRunnable 這個類。 2&#xff09;然后重寫 run() 方法&#xff0c;在這個函數中編寫要在線程池中…

RabbitMQ使用指南

介紹主要特點常用插件使用RabbitMQ的插件常用插件列表 應用場景Kafka與RabbitMq的區別主要優缺點安裝步驟插件安裝步驟 使用RabbitMqJava代碼示例拓展 介紹 RabbitMQ是由Erlang語言開發的&#xff0c;基于AMQP&#xff08;高級消息隊列協議&#xff09;協議實現的開源消息代理…

元宇宙紅色展廳VR虛擬展館提高受訓者的參與感

生活在和平年代的新一代青少年&#xff0c;可能對革命先烈英勇事跡難以有很深的體會&#xff0c;無法切實感受到中國共產黨無畏犧牲、誓死保家衛國的紅色精神&#xff0c;因此借助VR虛擬現實制作技術&#xff0c;讓參觀者們走近革命先烈中&#xff0c;感受老一輩無產階級革命家…

搜索引擎和網絡瀏覽器之間的區別

術語“搜索引擎”和“網絡瀏覽器”與互聯網有關。搜索引擎基本上是用于通過 Internet 搜索信息的工具&#xff0c;而 Web 瀏覽器是用于加載網頁等 HTML 文件的應用軟件。 閱讀本文以了解有關搜索引擎和網絡瀏覽器以及它們之間的區別的更多信息。 什么是搜索引擎&#xff1f; …

TrustZone之SMC異常

作為支持兩個安全狀態的一部分&#xff0c;該架構包括了Secure Monitor Call&#xff08;SMC&#xff09;指令。執行SMC會引發Secure Monitor Call異常&#xff0c;該異常目標是EL3。 通常&#xff0c;SMC用于請求服務&#xff0c;可以是來自駐留在EL3中的固件&#xff0c;也可…

微信小程序適配方案:rpx(responsive pixel響應式像素單位)

小程序適配單位&#xff1a;rpx 規定任何屏幕下寬度為750rpx 小程序會根據屏幕的寬度自動計算rpx值的大小 Iphone6下&#xff1a;1rpx 1物理像素 0.5css 小程序編譯后&#xff0c;rpx會做一次px換算&#xff0c;換算是以375個物理像素為基準&#xff0c;也就是在一個寬度…

迭代器失效及解決辦法

當使用迭代器遍歷容器并刪除元素時&#xff0c;迭代器可能會失效。 對于vector來說&#xff0c;如果使用普通迭代器&#xff08;例如std::vector<int>::iterator&#xff09;進行遍歷和刪除操作&#xff0c;當你刪除一個元素后&#xff0c;后面的元素會向前移動填補空缺…

服務器如何保證數據安全_Maizyun

服務器如何保證數據安全 在當今的數字化時代&#xff0c;數據安全已經成為企業和社會組織必須面對的重要問題。服務器作為存儲和處理大量數據的核心組件&#xff0c;必須采取有效的措施來確保數據的安全。本文將探討服務器如何保證數據安全。 一、訪問控制和身份認證 訪問控…

nvm,node,npm,yarn相關安裝報錯問題記錄

問題一&#xff1a; yarn : 無法加載文件 D:\jsPackage\nodejs\node_global\yarn.ps1&#xff0c;因為在此系統上禁止運行腳本。 解決&#xff1a; 步驟1,powerShell以管理員運行后&#xff0c;輸入命令: get-ExecutionPolicy 查看權限, 會看到它的返回值是 Restricted , 意…