请求老师帮我看下排序输出的方法
我的思路是计算平均分后放在一个新的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()); } }
正在回答
同学你好,直接定义一个map集合,将班级和平均成绩存入map集合中,然后对其进行排序是可以的哟。
2、把EntrySet传入的同时传入Comparator可参考如下:
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,
List可以允许重复的对象,是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
例如一个班的学生成绩,成绩可以重复,就可以使用List集合存放(一般的使用ArrayList就可以)
Set不允许重复,无序容器,无法保证每个元素的存储顺序
如果想保证元素的唯一性,就可以使用set集合,例如一个班的学生学号,学号不可以重复,就可以使用Set集合存放
Map的每个Entry都持有两个对象,也就是一个键一个值,Map可能会持有相同的值对象但键对象必须是唯一的。
例如每个班学生的学号和姓名的映射,每一个学号对应一个学生的姓名,学号不允许重复,但是学生的姓名是可以重复的。这个时候可以用map,根据唯一的学号,来查找对应的学生。
这里要添加的歌曲是可以重复的,并且是有序的,所以使用List集合
2、现阶段以作业效果来说是需要做一定判断的,而实际开发中,多数也是需要判断,避免出现不必要的问题
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星