1. 程式人生 > >java常見面試題(1)——HashMap的排序

java常見面試題(1)——HashMap的排序

java常見面試題(1)——HashMap的排序


問題描述:有一個HashMap<Integer,Student>,其中Student有String name 和 int age兩種屬性。要求寫一個方法,如參是此HashMap,返回值是排好序的HashMap,按照HashMap中Student的年齡的倒序進行排序,且key=value鍵值對不能被拆散。


解題思路:
  • 首先,我們要明白,HashMap<key,value>本身是無序的,就算用了一些複雜的方法,將其中的鍵和值取出,再次放入的時候也會變得無序。所以我們不能從HashMap下手,應該從它的一個有序子類LinkedHashMap
    。LinkedHashMap是有序的,而且他是HashMap的子類,所以我們可以在方法中將它返回。
  • 對集合進行排序的話,我們最好使用Java自帶的工具類:
    在這裡插入圖片描述
    它接收一個List,和一個比較器Comparator,在比較器中我們可以自定義排序的規則。
  • 由於排序工具類只能接收List,所以我們要現將HashMap中的鍵值對進行繫結,然後存放在set集合中,再由set轉化為Lsit。
  • 對List進行排序之後,再將結果存放進LinkedHashMap中,返回。
下面是具體程式碼:
public class Student {
    private String name;
    private int
age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public
void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
import javax.swing.text.html.parser.Entity;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        HashMap<Integer,Student> hashMap = new HashMap<>();

        Student student1 = new Student("張三",15);
        Student student2 = new Student("李四",13);//模擬一些資料存放進HashMap
        Student student3 = new Student("王武",18);

        hashMap.put(1,student1);
        hashMap.put(2,student2);
        hashMap.put(3,student3);

        System.out.println("排序前:"+hashMap);

        hashMap = sortHashMap(hashMap);

        System.out.println("排序後:"+hashMap);

    }

    public static HashMap<Integer,Student> sortHashMap(HashMap<Integer,Student> hashMap ){
        /*
        * 首先想到HashMap是無序的,所以我們應該用他有序的子類LinkedHashMap
        * */

        LinkedHashMap linkedHashMap = new LinkedHashMap();
        Set<Map.Entry<Integer,Student>> set =hashMap.entrySet();    //將HashMap中的鍵值對取出放入set
        ArrayList<Map.Entry<Integer,Student>> list = new ArrayList<>(set);  //把set轉化為List

        list.sort(new Comparator<Map.Entry<Integer, Student>>() {
            @Override
            public int compare(Map.Entry<Integer, Student> o1, Map.Entry<Integer, Student> o2) {
                return o2.getValue().getAge() - o1.getValue().getAge();     //自定義比較方法,倒序的話,就是後面的減前面的
            }
        });

        for (Map.Entry<Integer,Student> e:list){
            linkedHashMap.put(e.getKey(),e.getValue());
        }   // 遍歷排序過的List,將Entry<Integer,Student>的鍵和值分別取出,放入LinkedHashMap

        return linkedHashMap;


    }
}

執行結果

在這裡插入圖片描述

相關推薦

java見面試題(1)——HashMap排序

java常見面試題(1)——HashMap的排序 問題描述:有一個HashMap<Integer,Student>,其中Student有String name 和 int age兩種屬性

Java見面試題整理【1

---------------------  作者:ImportNewXXT0101  來源:CSDN  原文:https://blog.csdn.net/m0_37955444/article/details/78878030  版權宣告:本文為博主原創文章

java見面試題——java常見筆試題

外部類 成員變量 exceptio rect creat 依次 chan 發的 簡單工廠模式 註:轉載自http://www.cnblogs.com/yhason/archive/2012/05/08/2489932.html,版權歸其所有! 5、String是最基本的數

java見面試題——java試題總結

title bean hash strong 程序 面試題 瓶頸 factor 集合 註:本文轉載自http://www.cnblogs.com/huajiezh/p/5790928.html,版權歸其所有! Java常見面試題總結 一、Java基礎 1、String

Java見面試題之Forward和Redirect的區別

http請求 請求重定向 兩種 原理 目的 方式 重定向 public javax 原文出處: 阿赫瓦裏 Forward和Redirect代表了兩種請求轉發方式:直接轉發和間接轉發。 直接轉發方式(Forward),客戶端和瀏覽器只發出一次請求,Servlet、HTML

java見面試題(二)

stack word list span 哈希 shm sta tar base 1.java集合類   Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素(Elements)。Java SDK不提供直接繼承自

獻給 2018 還在艱苦奮鬥的 Java 程序員,Java 見面試題及答案!

逆向 說明 引用 實現接口 oat 註釋 架構 問題 自己 1.什麽是Java虛擬機?為什麽Java被稱作是“平臺無關的編程語言”? Java 虛擬機是一個可以執行 Java 字節碼的虛擬機進程。Java 源文件被編譯成能被 Java 虛擬機執行的字節碼文件。 Java

Java見面試題(基礎)

明天夏天準備去面試一下關於人工智慧或者軟體開發的暑期實習生,所以 提前準備一下,在網上看到一些很好的面試題,所以轉載方便日後觀看。 轉自此處            

java見面試題匯總(一)

本質 工作原理 如何 空值 實現機制 希望 子類 collect 屬性 面臨金九銀十的黃金跳槽季,不光是很多在職人員躍躍欲試,也有很多大學生積極地加入到應聘行列。作為技術出身的我們,找工作的一大前提就是技術是否能過關。而對於java程序員來說,至少是兩關的面試,這首個關卡就

Java見面試題及解答

ThreadLocal(執行緒變數副本) Synchronized實現記憶體共享,ThreadLocal為每個執行緒維護一個本地變數。 採用空間換時間,它用於執行緒間的資料隔離,為每一個使用該變數的執行緒提供一個副本,每個執行緒都可以獨立地改變自己的副本,而不會和其他執行緒的副本衝突。 Thread

各大網際網路公司Java見面試題

來源k6k4 答案參考:java常見面試題 1、面向物件的特點有哪些? 2、介面和抽象類有什麼聯絡和區別? 3、過載和重寫有什麼區別? 4、java有哪些基本資料型別? 5、陣列有沒有length()方法?String有沒有length()方法? 6、Java支援的資料型

java見面試題匯總(三)

字符串 cal 系統管理員 pst assembler nta 困難 開發者 對象 上一次更新的java面試題,很多小夥伴反應很簡單,其實上一期更新的就是更偏基礎的面試題,但這並不意味著,面試就這麽簡單,在java的學習中,有從Java基礎、框架、設計模式等等都是重點學習的

Java見面試題總結

概念 rt.jar 組裝 高效 chain 類型 swa 處理方式 編譯器 轉載請註明出處https://www.cnblogs.com/lwy521/ 1.面向對象 面向對象是基於現實事物,將事物抽象成對象,賦予對象屬性和方法,讓後讓每一對象去執行自己的方法與屬性,面向

java見面試題彙總(四)

本期的java面試題是偏向資料庫方面的,對相關技術知識匱乏的,或者對這方面不大自信的同學,面試之前可以參考一下這套題,這只是節選,試運營一下,如果不能滿足你們的需求,可以直接評論留言!  1、檢視的優缺點 答:優點: 1)對資料庫的訪問,因為檢視可以有選擇性的選取資料庫裡的一部分。 2 )使用者

java見面試題匯總(四)

對數 數據庫三範式 dst align all 進行 成對 留言 har 本期的java面試題是偏向數據庫方面的,對相關技術知識匱乏的,或者對這方面不大自信的同學,面試之前可以參考一下這套題,這只是節選,試運營一下,如果不能滿足你們的需求,可以直接評論留言! 1、視圖的優

Java見面試題彙總(五):spring框架

今天分享的java實習生常見面試題,是spring專場,主要是針對spring總結的面試題,有需要的小夥伴可以收入囊中了!   1、 Spring Framework 中有多少個模組,它們分別是什麼? Spring 核心容器 – 該層基本上是 Spring Framework 的核心。它包含以

見面試題1

1,mysql的三大引擎是啥? mysql常用的引擎有InnoDB,MyISAM,Memory,預設是InnoDB InnoDB:磁碟表,支援事務,支援行級鎖,B+Tree索引 ps:優點: 具有良好的ACID特性。適用於高併發,更新操作比較多的表。需要使用事務的表。對自動災難恢復有要求

java見面試題演算法

包括:氣泡排序,快速排序,快速查詢: import java.util.Arrays; public class SortAndFind { public static void bubbleSort(int[] array) { int i,j,temp; int count

java見面試題Java程式設計師面試題(六)

不知不覺中,已經將面試題更新到第六篇了,龐大的java面試題庫,想要刷完似乎不大可能,需要一點一點的積累。 1、java 中會存在記憶體洩漏嗎,請簡單描述。   答:會;存在無用但可達的物件,這些物件不能被GC 回收,導致耗費記憶體資源。 2、靜態變數和例項變數的區別?

Java見面試題彙總(七)

今天總結的是java框架相關的面試題,有需要的可以繼續拿去了。  1、J2EE 是什麼? 答:J2EE 是Sun 公司提出的多層(multi-diered),分散式(distributed),基於元件(component-base)的企業級應用模型(enterpriese application