Day15-集合-迭代器-课后练习-参考答案

文章目录

  • Day15_课后练习
  • 泛型练习题
    • 第1题
    • 第2题
    • 第3题
    • 第4题
    • 第5题
  • 集合练习题
    • 第1题
    • 第2题

Day15_课后练习

泛型练习题

第1题

案例:有如下四个学生的成绩:

在这里插入图片描述

(1)用Comparable接口对下列四位同学的成绩做降序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序。请正确指定泛型

(2)用Comparator实现按照姓名排序,请正确指定泛型

(3)效果如下

在这里插入图片描述

package com.atguigu.test01;import java.util.Comparator;
import java.util.TreeSet;public class Test01 {public static void main(String[] args) {System.out.println("按照成绩和年龄排序:");TreeSet<Student> set = new TreeSet<>();set.add(new Student("liusan",20,90.0));set.add(new Student("lisi",22,90.0));set.add(new Student("wangwu",20,99.0));set.add(new Student("sunliu",22,100.0));for (Student student : set) {System.out.println(student);}System.out.println("按照姓名排序:");TreeSet<Student> all = new TreeSet<>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o1.getName().compareTo(o2.getName());}});all.addAll(set);for (Student student : all) {System.out.println(student);}}
}
class Student implements Comparable<Student>{private String name;private int age;private double score;public Student(String name, int age, double score) {super();this.name = name;this.age = age;this.score = score;}public Student() {super();}public 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;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";}@Overridepublic int compareTo(Student stu) {if(this.getScore()>stu.getScore()){return -1;}else if(this.getScore() < stu.getScore()){return 1;}return this.getAge() - stu.getAge();}}

第2题

案例:

​ 1、声明一个坐标类Coordinate,它有两个属性:x,y,都为T类型

​ 2、在测试类中,创建两个不同的坐标类对象,分别指定T类型为String和Double,并为x,y赋值,打印对象

package com.atguigu.test02;public class Test02 {public static void main(String[] args) {Coordinate<Double> c1 = new Coordinate<>(123.5, 30.0);System.out.println(c1);Coordinate<String> c2 = new Coordinate<>("东经123.5°", "北纬30°");System.out.println(c2);}
}
class Coordinate<T>{private T x;private T y;public Coordinate(T x, T y) {super();this.x = x;this.y = y;}public Coordinate() {super();}public T getX() {return x;}public void setX(T x) {this.x = x;}public T getY() {return y;}public void setY(T y) {this.y = y;}@Overridepublic String toString() {return "Coordinate [x=" + x + ", y=" + y + "]";}}

第3题

案例:

​ 1、声明泛型方法,可以实现任意引用类型数组指定位置元素交换。

public static void method( T[] arr,int a,int b)

​ 2、在主方法中调用测试

package com.atguigu.test03;public class Test03 {public static void main(String[] args) {Integer[] arr = {1,2,3,4,5,6};method(arr,0,1);for (Integer num : arr) {System.out.println(num);}}public static <T> void method( T[] arr,int a,int b){//元素互换T temp = arr[a];arr[a] = arr[b];arr[b] = temp;}
}

第4题

案例:

​ 1、声明泛型方法,可以接收一个任意引用类型的数组,并反转数组中的所有元素

​ public static void reverse(T[] arr)

​ 2、在主方法中调用测试

package com.atguigu.test04;import java.util.Arrays;public class Test04 {public static void main(String[] args) {Integer[] arr = {1,2,3,4,5,6};reverse(arr);System.out.println(Arrays.toString(arr));}public static <T> void reverse(T[] arr){for (int i = 0; i < arr.length/2; i++) {T temp = arr[i];arr[i] = arr[arr.length-1-i];arr[arr.length-1-i] = temp;}}
}

第5题

案例:

​ 1、声明泛型方法,可以给任意对象数组按照元素的自然排序实现从小到大排序,用冒泡排序实现

​ public static void sort(T[] arr)

​ 2、声明泛型方法,可以给任意对象数组按照指定的比较器实现从小到大排序,用冒泡排序实现

​ public static void sort(T[] arr, Comparator<? super T> c)

package com.atguigu.test05;import java.util.Arrays;
import java.util.Comparator;public class Test05 {public static void main(String[] args) {Integer[] arr = {2,4,7,1,3};sort(arr);System.out.println(Arrays.toString(arr));String[] all = {"hello","Hello","Chai","chai"};sort(all,new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.compareToIgnoreCase(o2);}});System.out.println(Arrays.toString(all));}public static <T extends Comparable<T>> void sort(T[] arr){for (int i = 1; i < arr.length; i++) {for (int j = 0; j < arr.length-i; j++) {if(arr[j].compareTo(arr[j+1])>0){T temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}public static <T> void sort(T[] arr, Comparator<? super T> c){for (int i = 1; i < arr.length; i++) {for (int j = 0; j < arr.length-i; j++) {if(c.compare(arr[j], arr[j+1])>0){T temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}
}

集合练习题

第1题

  • 随机验证码。

    • 随机生成十组六位字符组成的验证码。
    • 验证码由大小写字母、数字字符组成。
  • 代码实现,效果如图所示:

    在这里插入图片描述

  • 开发提示:

    • 使用字符数组保存原始字符,利用Random类生成随机索引。
    • 将十组验证码放到集合中
    • 用Iterator迭代器遍历集合
package com.atguigu.test01;import java.util.Collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;public class Test01 {@SuppressWarnings("all")public static void main(String[] args) {char[] arr = new char[26+26+10];//使用字符数组保存原始字符for (int i = 0; i < arr.length; i++) {if(i<10){//前10个放数字arr[i] = (char)(i+48);}else if(i<10+26){//中间26个放大写字母arr[i] = (char)(i+65-10);}else{//剩下的放小写字母arr[i] = (char)(i+97-10-26);}}//随机生成10组验证码Collection<String> list = new ArrayList<String>();Random rand = new Random();for (int i = 0; i < 10; i++) {String str = "";for (int j = 0; j < 6; j++) {int index = rand.nextInt(arr.length);str += arr[index];}list.add(str);}Iterator<String> iter = list.iterator();while(iter.hasNext()){System.out.println("随机验证码:" + iter.next());}}
}

第2题

  • 键盘录入学生信息,保存到集合中。

    • 循环录入的方式,1:表示继续录入,0:表示结束录入。
    • 定义学生类,属性为姓名,年龄,使用学生对象保存录入数据。
    • 使用ArrayList集合,保存学生对象,录入结束后,用foreach遍历集合。
  • 代码实现,效果如图所示:

    在这里插入图片描述

package com.atguigu.test02;import java.util.Collection;
import java.util.ArrayList;
import java.util.Scanner;public class Test02 {public static void main(String[] args) {Collection<Student> list = new ArrayList<Student>();Scanner input = new Scanner(System.in);while(true){System.out.print("选择(1、录入;0、退出):");int select = input.nextInt();if(select == 0){break;}System.out.print("姓名:");String name = input.next();System.out.print("年龄:");int age = input.nextInt();Student stu = new Student(name,age);list.add(stu);}for (Student stu : list) {System.out.println(stu);}}
}
class Student{private String name;private int age;public Student(String name, int age) {super();this.name = name;this.age = age;}public Student() {super();}public 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;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}}

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

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

相关文章

SQL Server 开发环境配置教程(SSMS+SQL Prompt)

背景 记录一下 SQL Server 常用开发软件 体验了各种数据库IDE(DBeaver、Navicat、DataGrip)之后综合下来还是感觉 SSMSSQL Prompt 对于 SQL Server 最好用&#xff0c;所以在此记录一下配置过程 数据库可视化管理工具SSMS 官方下载地址&#xff1a; https://learn.microsoft…

【Simulink系列】——动态系统仿真 之 混合系统

声明&#xff1a;本系列博客参考有关专业书籍&#xff0c;截图均为自己实操&#xff0c;仅供交流学习&#xff01; 一、混合系统概述 由不同类型系统共同构成的系统称为混合系统&#xff01;仿真时必须考虑连续信号和离散信号的采样匹配问题&#xff0c;一般使用变步长连续求…

【JavaScript 漫游】【021】EventTarget 接口

事件的本质是程序各个组成部分之间的一种通信方式&#xff0c;也是异步编程的一种实现。DOM 支持大量的事件。 EventTarget 接口概述 DOM 的事件操作&#xff08;监听和触发&#xff09;&#xff0c;都定义在 EventTarget 接口。所有节点对象都部署了这个接口&#xff0c;其他…

[云原生] 二进制安装K8S(上)搭建单机matser、etcd集群和node节点

一、单机matser预部署设计 目前Kubernetes最新版本是v1.25&#xff0c;但大部分公司一般不会使用最新版本。 目前公司使用比较多的&#xff1a;老版本是v1.15&#xff0c;因为v1.16改变了很多API接口版本&#xff0c;国内目前使用比较多的是v1.18、v1.20。 组件部署&#xff…

React18源码: schedule任务调度messageChannel

React调度原理(scheduler) 在React运行时中&#xff0c;调度中心&#xff08;位于scheduler包&#xff09;是整个React运行时的中枢&#xff08;其实是心脏&#xff09;&#xff0c;所以理解了scheduler调度&#xff0c;就基本掌握了React的核心React两大循环&#xff1a;从宏…

Linux学习之vi/vim详细介绍

目录 ​编辑 1. 什么是 vim&#xff1f; 2. vi/vim 的使用 2.1 命令模式 2.2 输入模式 2.3 底线命令模式 3. vi/vim 使用实例 3.1 使用 vi/vim 进入一般模式 3.2 按下 i 进入输入模式(也称为编辑模式)&#xff0c;开始编辑文字 3.3 按下 ESC 按钮回到一般模式…

【Git企业实战开发】Git常用开发流操作总结

【Git企业实战开发】Git常用开发流操作总结 大家好 我是寸铁&#x1f44a; 总结了一篇Git常用开发流操作总结的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 现在刚做项目的伙伴&#xff0c;可能你之前学过git&#xff0c;但是一实战发现不熟悉 没关系&#xff0c;看寸铁这篇…

LLM 模型融合实践指南:低成本构建高性能语言模型

编者按&#xff1a;随着大语言模型技术的快速发展&#xff0c;模型融合成为一种低成本但高性能的模型构建新途径。本文作者 Maxime Labonne 利用 mergekit 库探索了四种模型融合方法&#xff1a;SLERP、TIES、DARE和passthrough。通过配置示例和案例分析&#xff0c;作者详细阐…

Base64 编码 lua

Base64 编码 -- Base64 字符表 local base64_chars { A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,…

Docker复习笔记

Centos7安装Docker Docker官网:www.docker.com Docker官网仓库:hub.docker.com Docker文档是比较详细的 安装相关依赖 yum -y install gcc gcc-c yum install -y yum-utils 设置docker镜像仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/do…

高分SCI绘图必备!你必须要学会的18种Matlab绘图代码与20个绘图技巧(附完整代码)

目录 绘图技巧篇 绘图代码篇 免费完整代码获取​ 今天为大家带来一期18种Matlab绘图代码与20个绘图技巧代码&#xff0c;所有代码完全免费&#xff01; 如果你想发SCI&#xff0c;普通的图已经进入不了审稿人的视线了&#xff0c;非常容易被拒稿。试想&#xff0c;如果一篇…

【b站咸虾米】chapter5_uniapp-API_新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

课程地址&#xff1a;【新课uniapp零基础入门到项目打包&#xff08;微信小程序/H5/vue/安卓apk&#xff09;全掌握】 https://www.bilibili.com/video/BV1mT411K7nW/?p12&share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 5 API 5.1 页面和路…

【Java程序设计】【C00287】基于Springboot的疫情防控期间某村外出务工人员管理系统(有论文)

基于Springboot的疫情防控期间某村外出务工人员管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的疫情防控期间某村外出务工人员信息管理系统 本系统分为系统功能模块、管理员功能模块、用户功能模块、采集…

两结点之间创建简单的梁单元并进行线性网格划分的方法

进入1D面板->进入bars界面 https://zhuanlan.zhihu.com/p/613163100

【Unity】Unity与安卓交互

问题描述 Unity和安卓手机进行交互&#xff0c;是我们开发游戏中最常见的场景。本教程将从一个简单的例子来演示一下。 本教程需要用到Android Studio2021.1.1 1.Android Studio新建一个工程 2.选择Empty Activity 然后点击Next 3.点击Finish完成创建 4.选择File-New-New Mo…

Linux:Jenkins用户权限和管理

1.下载插件 由于Jenkins的默认权限管理并不是很精细所以我们安装一个插件进行权限的一个管理 插件名称为&#xff1a;Role-based Authorization Strategy 安装完插件我们再去配置一下 进入全局安全配置 选择这个Role-Based Strategy策略然后保存 2.创建角色 我们这里主要使…

Odoo系统安装部署并结合内网穿透实现固定域名访问本地ERP系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

企微hook框架

https://wwm.lanzoum.com/ipUTp1ot1twh 密码:hvev 免费的企微框架 支持文本消息&#xff0c;图片消息&#xff0c;视频消息&#xff0c;文件消息。 其他可自行下载测试。 有兴趣可以进群交流。720192224 BOOL WxWorkSendData(string data) { WX_GETOBJDATA ob…

[C++]18:set和map的使用

set和map的使用 一.关联式容器&#xff1a;1.简单概念&#xff1a;2.<key , value>--->键值对3.set和map的底层结构&#xff08;平衡搜索树或者红黑树&#xff09; 二.set1.set (排序不重复)1.模板参数&#xff1a;2.set是一个有序存储的容器&#xff1a;3.set中每个数…

Vi/Vim 使用小窍门,如何消除搜索后的关键字高亮

Vim/Vi 基本上是 *nix 世界最受欢迎的编辑器了&#xff0c;不知道为什么&#xff0c;一直以来觉得和 Emacs 比起来&#xff0c;Vim 更加有亲和力。用起来很舒服。 今天就记录一个困扰了我很久的问题。 大家应该都知道&#xff0c;在 Vi 里面如果要搜索某个关键字&#xff0c;…