Java使用LinkedHashMap进行分数排序
发布时间 - 2026-01-11 01:07:24 点击率:次分数排序的特殊问题

在java中实现排序远比C/C++简单,我们只要让集合中元素对应的类实现Comparable接口,然后调用Collections.sort();方法即可.
这种方法对于排序存在许多相同元素的情况有些浪费,明显即使值相等,两个元素之间也要比较一下,这在现实中是没有意义的.
典型例子就是学生成绩统计的问题,例如高考中,满分是150,成千上万的学生成绩都在0-150之间,平均一个分数的人数成百上千,这时如果排序还用传统方法明显就浪费了.
进一步思考
成绩既然有固定的分数等级,我们可以把相同等级的成绩放在一起,以100分为满分计,共分一百个等级,来一个成绩就归入固定的档,要得到排序结果时可以从低档取到高档,取出来自然就是排序的结果.
接下来是确定数据结构的问题,档次-学生群这样的自然是key-value结构,但Map中的Hashtable和HashMap都不能保持插入时的顺序,虽然我们可以从固定的档次取名单,但这样略嫌不方便,我们需要更好的数据结构,它既以键值的形式存储数据,又能保持插入时的顺序.
LinkedHashMap横空出世
LinkedHashMap正是这样一个数据结构,它”在HashMap的基础上增加了一个双向链表,由此LinkedHashMap既能以哈希表的形式存储数据,又能保持查询时的顺序.”
下页就是进行排序用的类,它在构造实例时先创建好分数档次,加入学生成绩时自动归档,要取出排序的学生的成绩时只要按档次输出即可.
ScoreSorter类
辅助类Student
package com.junglesong;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Student implements Comparable{
private String name;
private int score;
public Student(String name,int score){
this.name=name;
this.score=score;
}
public int compareTo(Object obj){
Student another=(Student)obj;
return this.score-another.score;
}
public String toString(){
return "学生姓名="+name+" 分数="+score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public static void main(String[] args){
//-----------老排序方案-----------
/*TimeTest oldSortTest=new TimeTest();
List<Student> scores=new ArrayList<Student>();
Random random=new Random();
for(int i=0;i<100000;i++){
scores.add(new Student("学生"+i,random.nextInt(100)));
}
Collections.sort(scores);
//for(Student student:scores){
// System.out.println(student);
//}
oldSortTest.end("老排序方案耗时");*/
//-----------新排序方案-----------
TimeTest newSortTest=new TimeTest();
ScoreSorter sorter2=new ScoreSorter(100);
Random random=new Random();
for(int i=0;i<1000;i++){
sorter2.addStudent(new Student("学生"+i,random.nextInt(100)));
}
List<Student> ls=sorter2.getSortedScores();
//for(Student student:sorter2.getSortedScores()){
// System.out.println(student);
//}
newSortTest.end("新排序方案耗时");
}
}
与传统排序方案的比较
在元素个数远超等级个数即相同的元素很多时,这种方案在速度上稍高于传统方案,节省的时间主要在不比较同等级元素上.
这种方案能够按档次取出数据,这种优势是传统排序方案缺乏的.
传统方案普适性比此方案强.
源码:scoresorter
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java
# LinkedHashMap
# 排序
# Java中LinkedHashMap源码解析
# Java集合框架源码分析之LinkedHashMap详解
# 详解Java中LinkedHashMap
# java HashMap
# TreeMap与LinkedHashMap的详解
# Java有序的Map LinkedHashMap用法详解
# 数据结构
# 我们可以
# 又能
# 都在
# 也要
# 成百上千
# 基础上
# 这样一个
# 要让
# 要得
# 这在
# 它在
# 下页
# 还用
# 共分
# 远比
# 既能
# 大家多多
# 键值
# 一百个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
Python文件异常处理策略_健壮性说明【指导】
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel如何生成URL和重定向?(路由助手函数)
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
javascript中闭包概念与用法深入理解
Android自定义listview布局实现上拉加载下拉刷新功能
轻松掌握MySQL函数中的last_insert_id()
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
linux top下的 minerd 木马清除方法
开心动漫网站制作软件下载,十分开心动画为何停播?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何快速生成可下载的建站源码工具?
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
如何在万网利用已有域名快速建站?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何在万网开始建站?分步指南解析
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
Swift中循环语句中的转移语句 break 和 continue
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
怎么用AI帮你设计一套个性化的手机App图标?
如何自定义建站之星模板颜色并下载新样式?
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
C#如何调用原生C++ COM对象详解
Laravel如何集成Inertia.js与Vue/React?(安装配置)
如何用西部建站助手快速创建专业网站?
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
EditPlus中的正则表达式 实战(4)
Java解压缩zip - 解压缩多个文件或文件夹实例
如何在万网自助建站平台快速创建网站?
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Linux安全能力提升路径_长期防护思维说明【指导】
Laravel如何创建自定义中间件?(Middleware代码示例)

