• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > Java使用LinkedHashMap进行分数排序

Java使用LinkedHashMap进行分数排序

作者:doymm2008 字体:[增加 减小] 来源:互联网 时间:2017-05-28

doymm2008 通过本文主要向大家介绍了java linkedhashmap,java中linkedhashmap,linkedhashmap,linkedhashmap用法,linkedhashmap遍历等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

分数排序的特殊问题

在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("新排序方案耗时");  
  }
}
 

</div>

与传统排序方案的比较

在元素个数远超等级个数即相同的元素很多时,这种方案在速度上稍高于传统方案,节省的时间主要在不比较同等级元素上.
这种方案能够按档次取出数据,这种优势是传统排序方案缺乏的.
传统方案普适性比此方案强.

源码:scoresorter

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Java使用LinkedHashMap进行分数排序
  • 详解Java中LinkedHashMap
  • Java使用LinkedHashMap进行分数排序
  • 详解Java中LinkedHashMap

相关文章

  • 2017-05-28Java多线程中的单例模式两种实现方式
  • 2017-05-28java实现将汉语转换为拼音功能
  • 2017-05-28Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法
  • 2017-05-28Java的NIO与IO的详解及对比
  • 2017-05-28MyBatis拦截器:给参数对象属性赋值的实例
  • 2017-05-28Java使用FTPClient类读写FTP
  • 2017-05-28java 自己实现DataSource实现实例
  • 2017-05-28Java 中的HashMap详解和使用示例_动力节点Java学院整理
  • 2017-05-28Serializable接口的作用_动力节点Java学院整理
  • 2017-05-28VerifyCodeServlet(一次性验证码)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java中常用的字符串的比较方法(两种)
    • 基于Java的正则表达式
    • Java关键字this(动力节点Java学院整理)
    • java 爬虫详解及简单实例
    • SpringMVC实现前端后台交互传递数据
    • Spring 数据库连接池(JDBC)详解
    • spring boot拦截器实现IP黑名单实例代码
    • Java虚拟机工作原理
    • Java正则匹配中文的方法实例分析
    • 详解Spring中Bean的加载的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有