Java编程学习记录-集合练习
1.使用ArrayList集合去完成下面的功能键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值
package homework_num4;
/**
* 要求:使用ArrayList集合去完成下面的功能
键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Homework {
public static void main(String[] args) {
// 因为未知元素个数,所以创建集合存储元素
ArrayList<Integer> l = new ArrayList<Integer>();
// 创建键盘录入对象
Scanner sc = new Scanner(System.in);
// 因为不知道要录入多少数据,所以采用while循环
while (true) {
System.out.println("请输入一个数");
int num = sc.nextInt();
// 当录入值为零事跳出循环停止录入
if (num == 0) {
break;
}
// 将获取的值添加到集合中
l.add(num);
}
// int max = 0;
// for(Integer it : l) {
// if(max<it) {
// max=it;
// }
// }
// System.out.println(max);
// 定义数组接收集合数据,数组长度为集合数据长度
// public <T> T[] toArray(T[] a)
Integer[] arr = new Integer[l.size()];
// 集合转数组
l.toArray(arr);
// 数组由小到大自动排序
Arrays.sort(arr);
// 定义最大值为数组的最后一个数,最后一个数为数组长度减一
int max = arr[arr.length - 1];
// 输出最大值
System.out.println("最大值为:" + max);
}
}
2.键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台
a:自然排序
主函数
package homework_num1a;
/**
* 需求
* 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台
*
* 自然排序内容
*
*/
import java.util.TreeSet;
public class Num1Demo {
public static void main(String[] args) {
//创建TreeSet集合,实现对该类型自然排序
TreeSet<Student> ts = new TreeSet<Student>();
// 创建学生类对象
Student s = new Student();
// 创建接收对象
String name = "";
int a = 0;
int b = 0;
int c = 0;
System.out.println("请依次输入5个学生的姓名、语文成绩、数学成绩、英语成绩");
Student s1 = s.getDate(name, a, b, c);
Student s2 = s.getDate(name, a, b, c);
Student s3 = s.getDate(name, a, b, c);
Student s4 = s.getDate(name, a, b, c);
Student s5 = s.getDate(name, a, b, c);
// 添加元素
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
// 遍历
for (Student stu : ts) {
System.out.println("姓名:" + stu.getName() + ",总分:" + stu.getSum());
}
}
}
学生类
package homework_num1a;
import java.util.Scanner;
public class Student implements Comparable<Student> {
private String name;
private int sum;
public Student() {
super();
}
public Student(String name, int sum) {
super();
this.name = name;
this.sum = sum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
// 创建获取信息方法
public Student getDate(String name, int a, int b, int c) {
// 创建键盘录入对象,获取学生信息
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String sname = sc.nextLine();
System.out.println("语文成绩:");
int chscore = sc.nextInt();
System.out.println("数学成绩:");
int mathscore = sc.nextInt();
System.out.println("英语成绩:");
int engscore = sc.nextInt();
sum = chscore + mathscore + engscore;
Student stu = new Student(sname, sum);
// 返回Student数据
return stu;
}
// 重写compareto方法
@Override
public int compareTo(Student s) {
// 主要条件,比较总分-->由大到小排序
int sum = s.getSum() - this.getSum();
// 次要条件,姓名
int sum2 = sum == 0 ? this.name.compareTo(s.getName()) : sum;
return sum2;
}
}
b:选择器排序
主函数
package homework_num1b;
/**
* 需求
* 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台
*
* 选择器排序内容
*/
import java.util.Comparator;
import java.util.TreeSet;
import homework_num1a.Student;
public class Num1Demo {
public static void main(String[] args) {
// 创建学生类对象
Student s = new Student();
// 选择器排序,使用匿名内部类
TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int sum = s2.getSum() - s1.getSum();
int sum2 = sum == 0 ? s1.getName().compareTo(s1.getName()) : sum;
return sum2;
}
});
// 创建接收对象
String name = "";
int a = 0;
int b = 0;
int c = 0;
System.out.println("请依次输入5个学生的姓名、语文成绩、数学成绩、英语成绩");
Student s1 = s.getDate(name, a, b, c);
Student s2 = s.getDate(name, a, b, c);
Student s3 = s.getDate(name, a, b, c);
Student s4 = s.getDate(name, a, b, c);
Student s5 = s.getDate(name, a, b, c);
// 添加元素
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
// 遍历
for (Student stu : ts) {
System.out.println("姓名:" + stu.getName() + ",总分:" + stu.getSum());
}
}
}
学生类
package homework_num1b;
import java.util.Scanner;
public class Student {
private String name;
private int sum;
public Student() {
super();
}
public Student(String name, int sum) {
super();
this.name = name;
this.sum = sum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
// 创建获取信息方法
public Student getDate(String name, int a, int b, int c) {
// 创建键盘录入对象,获取学生信息
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生姓名:");
String sname = sc.nextLine();
System.out.println("语文成绩:");
int chscore = sc.nextInt();
System.out.println("数学成绩:");
int mathscore = sc.nextInt();
System.out.println("英语成绩:");
int engscore = sc.nextInt();
sum = chscore + mathscore + engscore;
Student stu = new Student(sname, sum);
// 返回Student数据
return stu;
}
}
3.获取10随机数,1-20之间,要求值不能重复!(ArrayList,HashSet)
package homework_num2;
/**
* 获取10随机数,1-20之间,要求值不能重复!
*/
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class Num2Demo {
public static void main(String[] args) {
//创建Random类对象
Random r = new Random();
//创建Set集合对象,子实现类:HashSet集合
Set<Integer> set = new HashSet<Integer>();
//获取随机数
while (true) {
int num = r.nextInt(20) + 1;
set.add(num);
//判断是否够10个数
if (set.size() == 10) {
break;
}
}
//遍历输出
for (Integer s : set) {
System.out.println(s);
}
}
}
4.ArrayList集合嵌套HashMap集合并遍历。
需求:假设ArrayList集合的元素是HashMap。有3个。每一个HashMap集合的键和值都是字符串。元素我已经完成,请遍历。
ArrayList<HashMap<String,String>>
结果:
周瑜---小乔
吕布---貂蝉
郭靖---黄蓉
杨过---小龙女
令狐冲---任盈盈
林平之---岳灵珊
package homework_num3;
/**
* 需求:
* ArrayList集合嵌套HashMap集合并遍历。
需求:
假设ArrayList集合的元素是HashMap。有3个。
每一个HashMap集合的键和值都是字符串。
元素我已经完成,请遍历。
ArrayList<HashMap<String,String>>
结果:
周瑜---小乔
吕布---貂蝉
郭靖---黄蓉
杨过---小龙女
令狐冲---任盈盈
林平之---岳灵珊
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public class Num3Demo {
public static void main(String[] args) {
//创建嵌套HashMap的ArrayList集合
ArrayList<HashMap<String,String>> l = new ArrayList<HashMap<String,String>>();
//获取元素
HashMap<String,String> m1 = new HashMap<String,String>();
m1.put("周瑜", "小乔");
m1.put("吕布","貂蝉");
HashMap<String,String> m2 = new HashMap<String,String>();
m2.put("郭靖", "黄蓉");
m2.put("杨过", "小龙女");
HashMap<String,String> m3 = new HashMap<String,String>();
m3.put("令狐冲", "任盈盈");
m3.put("林平之", "岳灵珊");
l.add(m1);
l.add(m2);
l.add(m3);
//遍历
for(HashMap<String, String> map : l ) {
//获取所有键的集合
Set<String> set = map.keySet();
for(String key : set) {
//通过键找值
String value = map.get(key);
System.out.println(key+"---"+value);
}
}
}
}