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.mzph.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;接下类用代码进行讲解。 我们这里传…

智能优化算法应用:基于浣熊算法无线传感器网络(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;本篇技…

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;如下…

【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-…

RabbitMQ使用指南

介绍主要特点常用插件使用RabbitMQ的插件常用插件列表 应用场景Kafka与RabbitMq的区别主要优缺点安装步骤插件安装步骤 使用RabbitMqJava代码示例拓展 介绍 RabbitMQ是由Erlang语言开发的&#xff0c;基于AMQP&#xff08;高级消息队列协议&#xff09;协议实现的开源消息代理…

元宇宙红色展厅VR虚拟展馆提高受训者的参与感

生活在和平年代的新一代青少年&#xff0c;可能对革命先烈英勇事迹难以有很深的体会&#xff0c;无法切实感受到中国共产党无畏牺牲、誓死保家卫国的红色精神&#xff0c;因此借助VR虚拟现实制作技术&#xff0c;让参观者们走近革命先烈中&#xff0c;感受老一辈无产阶级革命家…

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;也就是在一个宽度…

计算一组x和y(一维数组)

输入30个整数a1,a2,a3,…,a30&#xff0c;计算所有的x与y。已知&#xff1a; 输入格式: 30个整数 输出格式: 计算得到的x1, x2,.......,x10 计算得到的y1, y2,.......,y10 所有输出精确到小数点后3位。 注意&#xff1a; 1、输出的每个“”左右各有一个空格&#xff0c;输出…

坚鹏:兴业银行EAST5.0政策解读及数据质量提升方案培训

兴业银行股份有限公司&#xff08;简称“兴业银行”&#xff09;成立于1988年8月&#xff0c;2022年总资产9.27万亿元&#xff0c;是经国务院、中国人民银行批准成立的首批股份制商业银行之一&#xff0c;总行设在福州市。现已发展成为横跨境内外&#xff0c;线上线下结合&…

12.8 作业

1&#xff0c; 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#…

FLStudio中文2024中文最新汉化安装包下载

FLStudio中文21最新版本以其使用速度而闻名&#xff0c;是一个高度复杂的音乐制作环境。FL Studio免费&#xff0c;联合国音序器音频和MIDI每个复合编辑都是音乐。现代的DAW是一种非凡的野兽。首先&#xff0c;它在很大程度上把自己放在了(几乎)每个人记录过程的核心。其次&…

探索 SNMPv3 魔法:armbian系统安装snmp服务并通过SNMPV3进行连接控制

文章目录 说明SNMP服务的安装本机连接SNMPV3操作MIB Browser连接SNMPV3问题总结密码过短权限配置错误&#xff0c;导致OID不存在 说明 工具 建议尝试专业版ireasoning MIB brower&#xff0c;因为只有专业版支持SNMP v3的连接。当然&#xff0c;也可以尝试其他SNMP客户端工具 …

Java第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类&#xff0c;用户只要创建这些类的对象&#xff0c;使用相应的方法&#xff0c;即使不具备有关的网络支持&#xff0c;也可 以编写出高质量的网络…

kennard-stone算法实现样本集划分(ks算法)

目录 一、 Kennard-Stone算法原理&#xff08;KS算法&#xff09; 二、Kennard-Stone算法作用 三、代码 四、对选出来的train样本使用T-SNE算法进行绘制 五、参考链接 一、 Kennard-Stone算法原理&#xff08;KS算法&#xff09; KS算法原理&#xff1a;把所有的样本都看…

机器学习实验四:贝叶斯分类器

系列文章目录 机器学习实验一&#xff1a;线性回归机器学习实验二&#xff1a;决策树模型机器学习实验三&#xff1a;支持向量机模型机器学习实验四&#xff1a;贝叶斯分类器机器学习实验五&#xff1a;集成学习机器学习实验六&#xff1a;聚类 文章目录 系列文章目录一、实验…