欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用LinkedHashMap進行分數(shù)排序

 更新時間:2021年05月25日 10:58:18   作者:doymm2008  
這篇文章主要介紹了Java使用LinkedHashMap進行分數(shù)排序的相關代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

分數(shù)排序的特殊問題

在java中實現(xiàn)排序遠比C/C++簡單,我們只要讓集合中元素對應的類實現(xiàn)Comparable接口,然后調用Collections.sort();方法即可.
這種方法對于排序存在許多相同元素的情況有些浪費,明顯即使值相等,兩個元素之間也要比較一下,這在現(xiàn)實中是沒有意義的.
典型例子就是學生成績統(tǒng)計的問題,例如高考中,滿分是150,成千上萬的學生成績都在0-150之間,平均一個分數(shù)的人數(shù)成百上千,這時如果排序還用傳統(tǒng)方法明顯就浪費了.

進一步思考

成績既然有固定的分數(shù)等級,我們可以把相同等級的成績放在一起,以100分為滿分計,共分一百個等級,來一個成績就歸入固定的檔,要得到排序結果時可以從低檔取到高檔,取出來自然就是排序的結果.
接下來是確定數(shù)據(jù)結構的問題,檔次-學生群這樣的自然是key-value結構,但Map中的Hashtable和HashMap都不能保持插入時的順序,雖然我們可以從固定的檔次取名單,但這樣略嫌不方便,我們需要更好的數(shù)據(jù)結構,它既以鍵值的形式存儲數(shù)據(jù),又能保持插入時的順序.

LinkedHashMap橫空出世

LinkedHashMap正是這樣一個數(shù)據(jù)結構,它”在HashMap的基礎上增加了一個雙向鏈表,由此LinkedHashMap既能以哈希表的形式存儲數(shù)據(jù),又能保持查詢時的順序.”
下頁就是進行排序用的類,它在構造實例時先創(chuàng)建好分數(shù)檔次,加入學生成績時自動歸檔,要取出排序的學生的成績時只要按檔次輸出即可.

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+" 分數(shù)="+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("新排序方案耗時");  
  }
}

與傳統(tǒng)排序方案的比較

在元素個數(shù)遠超等級個數(shù)即相同的元素很多時,這種方案在速度上稍高于傳統(tǒng)方案,節(jié)省的時間主要在不比較同等級元素上.
這種方案能夠按檔次取出數(shù)據(jù),這種優(yōu)勢是傳統(tǒng)排序方案缺乏的.
傳統(tǒng)方案普適性比此方案強.

源碼:scoresorter

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • java代碼實現(xiàn)雙向鏈表

    java代碼實現(xiàn)雙向鏈表

    這篇文章主要為大家詳細介紹了java代碼實現(xiàn)雙向鏈表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java實現(xiàn)高并發(fā)秒殺的七種方式

    Java實現(xiàn)高并發(fā)秒殺的七種方式

    本文主要介紹了Java實現(xiàn)高并發(fā)秒殺的六種方式,包括使用緩存、數(shù)據(jù)庫樂觀鎖、數(shù)據(jù)庫悲觀鎖、分布式鎖、隊列限流、令牌桶算法和限流器,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • java發(fā)送javax.mail郵件實例講解

    java發(fā)送javax.mail郵件實例講解

    這篇文章主要為大家介紹了java發(fā)送javax.mail郵件實例講解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Java語言中4種內部類的超詳細講解

    Java語言中4種內部類的超詳細講解

    這篇文章主要給大家介紹了關于Java語言中4種內部類的超詳細講解,內部類可以分為:實例內部類、靜態(tài)內部類和成員內部類,每種內部類都有它特定的一些特點,文中介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • 詳解SpringMVC的攔截器參數(shù)及攔截器鏈配置

    詳解SpringMVC的攔截器參數(shù)及攔截器鏈配置

    攔截器(Interceptor)是一種動態(tài)攔截方法調用的機制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行。本文將詳細講講SpringMVC中攔截器參數(shù)及攔截器鏈配置,感興趣的可以嘗試一下
    2022-07-07
  • Java實現(xiàn)的猴子吃桃問題算法示例

    Java實現(xiàn)的猴子吃桃問題算法示例

    這篇文章主要介紹了Java實現(xiàn)的猴子吃桃問題算法,簡單描述了猴子吃桃問題并結合實例形式給出了java解決猴子吃桃問題的具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • Maven使用Nexus創(chuàng)建私服的實現(xiàn)

    Maven使用Nexus創(chuàng)建私服的實現(xiàn)

    本文主要介紹了Maven使用Nexus創(chuàng)建私服的實現(xiàn),通過建立自己的私服,就可以降低中央倉庫負荷、節(jié)省外網帶寬、加速Maven構建、自己部署構件等,從而高效地使用Maven,感興趣的可以了解一下
    2024-04-04
  • Java加載JDBC驅動程序實例詳解

    Java加載JDBC驅動程序實例詳解

    這篇文章主要介紹了Java加載JDBC驅動程序的方法,需要的朋友可以參考下
    2014-07-07
  • Java Enum的簡單使用

    Java Enum的簡單使用

    這篇文章主要為大家詳細介紹了Java Enum的簡單使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • ElasticSearch添加索引代碼實例解析

    ElasticSearch添加索引代碼實例解析

    這篇文章主要介紹了ElasticSearch添加索引代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04

最新評論