最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用LinkedHashMap進(jìn)行分?jǐn)?shù)排序

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

分?jǐn)?shù)排序的特殊問(wèn)題

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

進(jìn)一步思考

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

LinkedHashMap橫空出世

LinkedHashMap正是這樣一個(gè)數(shù)據(jù)結(jié)構(gòu),它”在HashMap的基礎(chǔ)上增加了一個(gè)雙向鏈表,由此LinkedHashMap既能以哈希表的形式存儲(chǔ)數(shù)據(jù),又能保持查詢時(shí)的順序.”
下頁(yè)就是進(jìn)行排序用的類,它在構(gòu)造實(shí)例時(shí)先創(chuàng)建好分?jǐn)?shù)檔次,加入學(xué)生成績(jī)時(shí)自動(dòng)歸檔,要取出排序的學(xué)生的成績(jī)時(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 "學(xué)生姓名="+name+" 分?jǐn)?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("學(xué)生"+i,random.nextInt(100)));
    }
    
    Collections.sort(scores);
    //for(Student student:scores){
    //  System.out.println(student);
    //}
    oldSortTest.end("老排序方案耗時(shí)");*/
    
    //-----------新排序方案-----------
    TimeTest newSortTest=new TimeTest();
    ScoreSorter sorter2=new ScoreSorter(100);
    
    Random random=new Random();
    for(int i=0;i<1000;i++){
      sorter2.addStudent(new Student("學(xué)生"+i,random.nextInt(100)));
    }
    
   List<Student> ls=sorter2.getSortedScores();
    //for(Student student:sorter2.getSortedScores()){
    //  System.out.println(student);
    //}
    newSortTest.end("新排序方案耗時(shí)");  
  }
}

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

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

源碼:scoresorter

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決Maven項(xiàng)目本地公共common包緩存問(wèn)題

    解決Maven項(xiàng)目本地公共common包緩存問(wèn)題

    這篇文章主要介紹了解決Maven項(xiàng)目本地公共common包緩存問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • spring boot前后端傳參的實(shí)現(xiàn)

    spring boot前后端傳參的實(shí)現(xiàn)

    這篇文章主要介紹了spring boot前后端傳參的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • SpringBoot接入deepseek深度求索示例代碼(jdk1.8)

    SpringBoot接入deepseek深度求索示例代碼(jdk1.8)

    這篇文章主要介紹了SpringBoot接入deepseek深度求索的相關(guān)資料,包括建API?key、封裝詢問(wèn)Deepseek的工具方法(在配置文件中添加key值)、調(diào)用測(cè)試并確保端口一致例如8091,最后運(yùn)行結(jié)果,需要的朋友可以參考下
    2025-02-02
  • Java即將引入新對(duì)象類型來(lái)解決內(nèi)存使用問(wèn)題

    Java即將引入新對(duì)象類型來(lái)解決內(nèi)存使用問(wèn)題

    這篇文章主要介紹了Java即將引入新對(duì)象類型來(lái)解決內(nèi)存使用問(wèn)題,文章通過(guò)圍繞主題的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出的步驟詳解

    Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出的步驟詳解

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Excel的導(dǎo)入、導(dǎo)出,文中示例代碼介紹的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴們可以參考一下
    2023-06-06
  • SpringBoot連接Hive實(shí)現(xiàn)自助取數(shù)的示例

    SpringBoot連接Hive實(shí)現(xiàn)自助取數(shù)的示例

    這篇文章主要介紹了SpringBoot連接Hive實(shí)現(xiàn)自助取數(shù)的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-12-12
  • Java內(nèi)存泄漏問(wèn)題排查與解決

    Java內(nèi)存泄漏問(wèn)題排查與解決

    大家好,本篇文章主要講的是Java內(nèi)存泄漏問(wèn)題排查與解決,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Java實(shí)現(xiàn)無(wú)向圖的示例詳解

    Java實(shí)現(xiàn)無(wú)向圖的示例詳解

    邊沒(méi)有方向的圖稱為無(wú)向圖,直觀來(lái)說(shuō),若一個(gè)圖中每條邊都是無(wú)方向的,則稱為無(wú)向圖。本文將通過(guò)示例詳細(xì)講解Java如何實(shí)現(xiàn)無(wú)向圖,需要的可以參考一下
    2022-04-04
  • 解決@Autowired報(bào)錯(cuò)Could not autowire. No beans of ‘XXX‘ type found問(wèn)題

    解決@Autowired報(bào)錯(cuò)Could not autowire. No bea

    介紹了在IDEA中使用@Autowired報(bào)錯(cuò)Couldnot autowire. No beans of 'XXX' type found的解決方法,原因是@Autowired在注入service時(shí),由于service接口沒(méi)有實(shí)現(xiàn)類,而mybatis僅需提供Dao接口,導(dǎo)致@Autowired無(wú)法識(shí)別
    2024-12-12
  • RocketMQ?broker文件清理源碼解析

    RocketMQ?broker文件清理源碼解析

    這篇文章主要為大家介紹了RocketMQ?broker文件清理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論

宁夏| 蕉岭县| 会昌县| 乌恰县| 青神县| 宜阳县| 莱芜市| 马龙县| 两当县| 杂多县| 永年县| 普定县| 温宿县| 杭锦旗| 平安县| 延川县| 新闻| 叙永县| 德清县| 丰宁| 华池县| 高安市| 灵台县| 阳高县| 雅江县| 盐山县| 武穴市| 海盐县| 雅安市| 霸州市| 鲁山县| 平利县| 衡水市| 永春县| 成都市| 吉木萨尔县| 海城市| 柘城县| 庄河市| 安吉县| 乐平市|