Java使用LinkedHashMap进行分数排序
分数排序的特殊问题
在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("新排序方案耗时"); } }
与传统排序方案的比较
在元素个数远超等级个数即相同的元素很多时,这种方案在速度上稍高于传统方案,节省的时间主要在不比较同等级元素上.
这种方案能够按档次取出数据,这种优势是传统排序方案缺乏的.
传统方案普适性比此方案强.
源码:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
Java使用LinkedHashMap进行分数排序
-
java获取键盘输入的数字,并进行排序的方法
-
php使用js对表格进行排序,phpjs表格排序_PHP教程
-
java如何对map进行排序详解(map集合的使用)
-
使用Java调用摄像头进行拍照源码 JavaSwingSUNF#Microsoft
-
使用Java调用摄像头进行拍照源码 JavaSwingSUNF#Microsoft
-
Java中使用jaxp进行sax解析_动力节点Java学院整理
-
Java中对list map根据map某个key值进行排序的方法
-
java进行jpeg压缩和解析(不使用com.sun.image包) 博客分类: java总结 javajpeg
-
使用jaxp进行dom解析_动力节点Java学院整理