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);
				
			}
		}
		
	}
}