Map、List、Set及Collections集合工具类的综合案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Point9/article/details/84147476

给定6名学生的考试分数录入到地图中,以学号作为密钥,分数作为值;

打印该6名学生及对应的分数;并按分数显示前三名学员学号与成绩(选做题)

要求:综合地图,列表中,设置应用---使用集合工具对列表排序

问题:

1:假设分数不存在重复的(不做有重复分数判断)

2:假设有重名的分数,打印如下(选做)


思路分析:

分数是无序可重复的----的ArrayList

学号是唯一的且按分数排序---- TreeSet中

学号,分数存到地图中


问题一的源代码:

package com.point9.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

/**
 * 
 * @author 点就博客
 * 1. 给定6名学生的考试分数录入到Map中,以学号作为key,分数作为value;
 * 打印该6名学生及对应的分数;并按分数显示前三名学员学号与成绩(选做题)
 * 思路:综合Map、List、Set应用---使用Collections工具对List排序
 * 分析:分数是无序可重复的----ArrayList
 * 		学号是唯一的且按分数排序----TreeSet
 * 		学号、分数存到Map中
 */
public class Test {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		Set<Integer> set = new TreeSet<>();
		TreeMap<Integer, Integer> map = new TreeMap<>();
		//1、录入学生信息(map集合)
		map.put(1, 66);
		map.put(2, 83);
		map.put(3, 72);
		map.put(4, 96);
		map.put(5, 51);
		map.put(6, 94);
		//2、遍历输出所有学生信息(map集合调动entry方法后利用增强for遍历输出)
		Set<Entry<Integer, Integer>> ent = map.entrySet();
		System.out.println("学号:\t\t成绩:");
		for(Entry<Integer, Integer> e:ent) {
			//存成绩
			list.add(e.getValue());
			//输出所有学生的成绩(按录入顺序输出,未排序)
			System.out.println(e.getKey()+"\t\t"+e.getValue());
		}
		//3、输出分数前三名的学生信息,集合的工具类进行排序
		Collections.sort(list);
		System.out.println("前三名学员的成绩如下:");
		//输出前三名的成绩(成绩由高到低的输出)
		for(int i=1;i<=3;i++) {//只输出三名学生
			//System.out.println(list.get(list.size()-i));
			for(Entry<Integer, Integer> e:ent) {//遍历map集合
				if(list.get(list.size()-i)==e.getValue()) {//获取前三名的学号
					//存学号,为第二问做铺垫
					set.add(e.getKey());
					//这里的输出语句在前三名无重复时可用
					System.out.println(e.getKey()+"\t\t"+e.getValue());
				}
			}
		}
	}
}

问题一的测试截图:


问题二的源代码

package com.point9.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

/**
 * 
 * @author 点九博客
 * 1. 给定6名学生的考试分数录入到Map中,以学号作为key,分数作为value;
 * 打印该6名学生及对应的分数;并按分数显示前三名学员学号与成绩(选做题)
 * 思路:综合Map、List、Set应用---使用Collections工具对List排序
 * 分析:分数是无序可重复的----ArrayList
 * 		学号是唯一的且按分数排序----TreeSet
 * 		学号、分数存到Map中
 */
public class Test {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		Set<Integer> set = new TreeSet<>(new Comparator<Integer>() {
			//4、匿名内部类实现学号排序
			@Override
			public int compare(Integer i1, Integer i2) {
				return i2-i1;//分数相同的话,学号由高到低
			}
		});
		TreeMap<Integer, Integer> map = new TreeMap<>();
		//1、录入学生信息(map集合)
		map.put(1, 66);
		map.put(2, 83);
		map.put(3, 72);
		map.put(4, 96);
		map.put(5, 51);
		map.put(6, 94);
		//2、遍历输出所有学生信息(map集合调动entry方法后利用增强for遍历输出)
		Set<Entry<Integer, Integer>> ent = map.entrySet();
		System.out.println("学号:\t\t成绩:");
		for(Entry<Integer, Integer> e:ent) {
			//存成绩
			list.add(e.getValue());
			//输出所有学生的成绩(按录入顺序输出,未排序)
			System.out.println(e.getKey()+"\t\t"+e.getValue());
		}
		//3、输出分数前三名的学生信息,集合的工具类进行排序
		Collections.sort(list);
		System.out.println("前三名学员的成绩如下:");
		//输出前三名的成绩(成绩由高到低的输出)
		for(int i=1;i<=3;i++) {//只输出三名学生
			//System.out.println(list.get(list.size()-i));
			for(Entry<Integer, Integer> e:ent) {//遍历map集合
				if(list.get(list.size()-i)==e.getValue()) {//获取前三名的学号
					//存学号
					set.add(e.getKey());
					//这里的输出语句在前三名无重复时可用
					//System.out.println(e.getKey()+"\t\t"+e.getValue());
				}
			}
		}
		//4、成绩相同,学号靠前先输出--调用了set集合通过匿名内部类实现的排序方法
		for(Integer in:set) {//遍历set集合
			for(Entry<Integer, Integer> e:ent) {//遍历map集合
				if(in==e.getKey()) {
					//此处的输出允许前三名有相同的成绩,成绩相同,学号大的往前排
					System.out.println(in+"\t\t"+e.getValue());
				}
			}
		}	
	}
}

测试截图:


网络全栈技术交流

点击链接加入群聊【网全栈交流群】:https://jq.qq.com/?_ wv = 1027&k = 5rnUzsF

QQ群二维码

猜你喜欢

转载自blog.csdn.net/Point9/article/details/84147476