1. 程式人生 > >能夠排序的Map實現類TreeMap類

能夠排序的Map實現類TreeMap類

1 TreeMap類的介紹 Map介面派生了一個SortedMap子介面,SortedMap有一個TreeMap實現類。 TreeMap是基於紅黑樹對TreeMap中所有key進行排序,從而保證TreeMap中所有key-value對處於有序狀態。 TreeMap也有兩種排序方式: 自然排序:TreeMap的所有key必須實現Comparable介面,而且所有key應該是同一個類的物件,否則將會丟擲ClassCastException異常。 定製排序:建立TreeMap時,傳入一個Comparator物件,該物件負責對TreeMap中所有key進行排序。採用定製排序時不要求Map的key實現Comparable介面。 2 程式碼示例 import java.util.*; class R implements Comparable{ int count; public R(int count) { this.count = count; } public String toString{ return "R[count:" + count + "]"; } // 根據count來判斷兩個物件是否相等。 public boolean equals(Object obj){ if (this == obj) return true; if (obj != null&& obj.getClass == R.class){ R r = (R)obj; return r.count == this.count; } return false; } // 根據count屬性值來判斷兩個物件的大小。 public int compareTo(Object obj){ R r = (R)obj; return count > r.count ? 1 :count < r.count ? -1 : 0; } } public class TreeMapTest{ public static void main(String[] args){ TreeMap tm = new TreeMap; tm.put(new R(3) , "蘭花"); tm.put(new R(-5) , "龜背竹"); tm.put(new R(9) , "紫羅蘭"); System.out.println(tm); // 返回該TreeMap的第一個Entry物件 System.out.println(tm.firstEntry); // 返回該TreeMap的最後一個key值 System.out.println(tm.lastKey); // 返回該TreeMap的比new R(2)大的最小key值。 System.out.println(tm.higherKey(new R(2))); // 返回該TreeMap的比new R(2)小的最大的key-value對。 System.out.println(tm.lowerEntry(new R(2))); // 返回該TreeMap的子TreeMap System.out.println(tm.subMap(new R(-1) , new R(4))); } } 3 執行結果 { R[count:-5]=龜背竹, R[count:3]=蘭花, R[count:9]=紫羅蘭 } R[count:-5]=龜背竹 R[count:9] R[count:3] R[count:-5]=龜背竹 { R[count:3]=蘭花 } 4 程式碼分析上面示例以自然排序為例,介紹TreeMap的基本用法。

相關推薦

能夠排序Map實現TreeMap

1 TreeMap類的介紹 Map介面派生了一個SortedMap子介面,SortedMap有一個TreeMap實現類。 TreeMap是基於紅黑樹對TreeMap中所有key進行排序,從而保證TreeMap中所有key-value對處於有序狀態。 TreeMap也有兩種排

【第18天】Java集合(五)---Map介面概述及Map介面實現的HashMap、SortedMap介面實現TreeMap

1 Map的通性 1.1 基本用法與特點 1.2 遍歷 2 HashMap集合的特性 3 TreeMap集合的特性 1 Map的通性     &nb

Java多線程系列六——Map實現

coo cut tab for http current color text 加鎖 參考資料: https://crunchify.com/hashmap-vs-concurrenthashmap-vs-synchronizedmap-how-a-hashmap-can-

排序算法的C語言實現(上 比較排序:插入排序、快速排序與歸並排序)

大於等於 額外 通過命令 無序 tro 需要 目錄 線性 如何選擇 總述:排序是指將元素集合按規定的順序排列。通常有兩種排序方法:升序排列和降序排列。例如,如整數集{6,8,9,5}進行升序排列,結果為{5,6,8,9},對其進行降序排列結果為{9,8,6,5}。雖然排序的

ArrayList的練習 編寫程式實現對Employee排序

練習題: 編寫程式實現對Employee類的排序,要求如下: a) 給Employee類新增屬性:name:String,age:int,salary:double  b) 把若干Employee物件放在List中,排序並遍歷輸出,排序規則:salary高的在前,sa

常見的五排序演算法圖解和實現(歸併:二路歸併排序

歸併類的排序演算法 歸併:將兩個或兩個以上的有序表組合成一個新的有序表。 內部排序中,通常採用的是 2-路歸併排序。即:將兩個位置相鄰的記錄有序子序列歸併為一個記錄有序的序列。歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and

Java集合List、Set、Queue、Map實現

1.Collection    Collection最基本的集合介面,一個Collection代表一組Object的集合public interface Collection<E> extends Iterable<E> {任何實現Collection

[JDK 1.6] JAVA集合 Map 實現 HashMap (對映表) 原始碼淺析

JAVA集合 Map 實現類 HashMap (對映表) 原始碼淺析 文章目錄 [一] 簡述: HashMap 最關鍵的屬性: HashMap 儲存資料的節點 介面 Map.Entry, 實現類 Entry [二] 構造方法:

[JDK 1.8]JAVA集合 Map 實現 HashMap (對映表) 原始碼淺析

文章目錄 一、簡述: 二、HashMap 的欄位屬性 三、構造方法: 四、Map 的方法 1. put(K k, V v) 簡述摘自 java api 文件註釋 原始碼來自 JDK 1.8

八個排序比較+實現+詳細解釋

前言 剛學完資料結構,寫此文目的如下 加深對五大類共八個排序演算法思想的理解 比較各自的演算法效率(主要是時間複雜度) 尋找演算法思想間的聯絡與區別 用順序結構、鏈式結構實現演算法 用遞迴、非遞迴(迭代)實現演算法 記錄下來以便複習鞏固

Map接口的實現

class text system while str method out ner apt public class MapText { public static void main(String[] args) { // TODO

2.1--RandomAccessFile實現的關聯FileChannel

begin int pack -- 做什麽 logs 展示 log ble DataInput接口的類圖已經畫出,盡管類圖已經展示了與DataInputStream和RandomAccessFile這兩個實現類有各種聯系的元素。但是此時,我對這些元素一無所知,類圖還不夠詳盡

Eclipse4.7使用基礎 在創建的時候,進行設置自動實現抽象父的所有抽象方法

sleep 所有 png 2-2 finish highlight lips ner eclipse os :windows7 x64 jdk:jdk-8u131-windows-x64 ide:Eclipse Oxygen Release (4.7.0

系統擴展方法,實現對所有或某種類擴展自定義方法

系統 方法 extension lis empty sem sta 實現 .... 擴展方法的格式: 1、必須把擴展方法寫在靜態類中 2、擴展方法的第一個參數必須加 "this" 修飾 例如,對所有object對象的擴展方法IsEmptyOrNull,判斷對象是否為空,ob

JS中集合對象(Array、Map、Set)及數組對象的使用與對比

new item 是否 匹配 全局搜索 用法 self star 刪除 原文地址 在使用js編程的時候,常常會用到集合對象,集合對象其實是一種泛型,在js中沒有明確的規定其內元素的類型,但在強類型語言譬如Java中泛型強制要求指定類型。 ES6引入了iterable類

C語言實現C++的

per class pre out ++ del init lock gpo    typedef struct _s_gpio GPIO; typedef struct _s_gpio{ uint32_t gpiox; uint32_t gpio_pin

Eclipse下建立簡單JNI程序實現返回double

package 技術分享 png 環境變量path post 磁盤 jni 函數 height 在Eclipse下生成時要註意,由於通常是在package裏面添加類,而非像單獨建立工程時獨立添加,所以,在編譯的時候,都需要進入包所在的文件夾, javac 包名.類名 這樣的

c++中模板的實現(模板和模板函數)

c++ 模板實例化 泛型編程 [TOC] 模板  當我們實現一個交換函數時,我們可以寫成如下。 void Swap(int& x, int& y) { int tmp = x; x = y; y = tmp; }  這裏只能交換兩個整

C++之自己實現的String全部

efi char* 傳遞 light assign 關鍵字 flag pri ostream 一:回顧 (1)c++中的string類是在面試中和筆試中經常考的題目; 工程代碼免費下載 string類的自行實現 (2)c++中的string類和fstream類合起來是處理外

map轉實體工具

sem throws array 工具類 ase .com exception copy ret package cst.spmBase.util; import java.lang.reflect.InvocationTargetException;import java