请求老师帮我看下排序输出的方法

请求老师帮我看下排序输出的方法

我的思路是计算平均分后放在一个新的Map<班级名称,平均分数>中,再转换为List进行排序输出

我觉得过于繁琐,可不可以使用TreeMap或者TreeSet进行排序?

TreeMap<班级名称,平均分数>是不是只能对班级名称排序?

我看TreeSet的构造函数中没有双参构造那我是否无法把EntrySet传入的同时传入Comparator?

public void sortChineseByAverage() {
		Map<String, Float> scoreMap = new HashMap<String, Float>();
		Iterator<Banji> it = schoolMap.values().iterator();
		// 将<班级名称,平均分数>放到scoreMap中
		while (it.hasNext()) {
			Banji banji = it.next();
			float score = 0.0f;
			int num = 0;
			for (Student student : banji.getStuList()) {
				score += student.getChinese();
				num++;
			}
			scoreMap.put(banji.getClassName(), score / num);
		}
		// 将scoreMap转为List排序输出
		List<Entry<String, Float>> scoreList = new ArrayList<Entry<String, Float>>(scoreMap.entrySet());
		Collections.sort(scoreList, new ScoreComparator());
		System.out.println("各班语文成绩按平均分进行由大到小排序为:");
		for (Entry<String, Float> entry : scoreList) {
			System.out.println(entry.getKey() + " " + entry.getValue());
		}
	}
public class ScoreComparator implements Comparator<Entry<String, Float>> {

	@Override
	public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {
		return o2.getValue().compareTo(o1.getValue());
	}
}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,直接定义一个map集合,将班级和平均成绩存入map集合中,然后对其进行排序是可以的哟。

2、把EntrySet传入的同时传入Comparator可参考如下:

http://img1.sycdn.imooc.com//climg/5f3f868309c3645612760832.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 能掐会算 提问者 #1
    老师,如何对map或者set排序呢,只能转成list嘛
    2020-08-21 16:29:32
  • 能掐会算 提问者 #2
    我看老师的代码中写了很多校验相关的东西,比如找不到班级的情况,实际上会发生这种情况吗?数据是直接取系统中存在的班级
    2020-08-21 17:31:03
好帮手慕小脸 2020-08-21 18:20:33

同学你好,

  • List可以允许重复的对象,是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。

例如一个班的学生成绩,成绩可以重复,就可以使用List集合存放(一般的使用ArrayList就可以)

  • Set不允许重复,无序容器,无法保证每个元素的存储顺序

如果想保证元素的唯一性,就可以使用set集合,例如一个班的学生学号,学号不可以重复,就可以使用Set集合存放

  • Map的每个Entry都持有两个对象,也就是一个键一个值,Map可能会持有相同的值对象但键对象必须是唯一的。

例如每个班学生的学号和姓名的映射,每一个学号对应一个学生的姓名,学号不允许重复,但是学生的姓名是可以重复的。这个时候可以用map,根据唯一的学号,来查找对应的学生。

这里要添加的歌曲是可以重复的,并且是有序的,所以使用List集合

2、现阶段以作业效果来说是需要做一定判断的,而实际开发中,多数也是需要判断,避免出现不必要的问题

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师