TreeMap使用和底層原理_Comparable介面_HashTable特點
阿新 • • 發佈:2018-12-14
TreeMap是紅黑二叉樹的典型實現,我們開啟TreeMap的原始碼,發現裡面有一行核心程式碼: root用來儲存整樹的根節點。我們繼續跟蹤Entry(是TreeMap的內部類)的程式碼:(jdk1.6),1.8版本中為Node,
TreeMap 和 HashMap 實現了同樣的 Map介面,,用法對於呼叫者沒有什麼區別,HashMap 的效率高於 TreeMap,在需要排序的Map 採用到 TreeMap
package com.jianshun; import java.util.Map; import java.util.TreeMap; import java.util.concurrent.Callable; /** * 測試TreeMap的使用 * @author Administrator * */ public class TestTreeMap { public static void main(String[] args) { Map<Integer,String> treemap1 = new TreeMap<Integer,String>(); treemap1.put(20, "aa"); treemap1.put(3, "bb"); treemap1.put(6, "cc"); //按照KEY遞增的方式排序 for(Integer key : treemap1.keySet()){ System.out.println(key+"--"+treemap1.get(key)); } Map<Emp,String> treemap2 = new TreeMap<Emp,String>(); treemap2.put(new Emp(100, "張三",50000),"張三是一個好傢伙"); treemap2.put(new Emp(200 ,"李四",5000), "李四工作不積極"); treemap2.put(new Emp(150,"王五",6000), "王五工作還不錯"); treemap2.put(new Emp(50,"趙六",6000), "趙六工作還不錯"); //按照KEY遞增的方式排序 for(Emp key : treemap2.keySet()){ System.out.println(key+"--"+treemap2.get(key)); } } } //當key是一個自定義物件時; class Emp implements Comparable<Emp>{ int id; String name; double salary; public Emp(int id, String name, double salary) { super(); this.id = id; this.name = name; this.salary = salary; } public int compareTo(Emp o) {//負數:小於,0:等於,整數:大於 if(this.salary > o.salary){ return 1; }else if(this.salary < o.salary){ return -1; }else{// salary相等在比較id if(this.id > o.id){ return 1; }else if(this.id < o.id){ return -1; }else{ return 0; } } } @Override public String toString() { return "Emp [id=" + id + ", name=" + name + ", salary=" + salary + "]"; } }
// Emp [id=200, name=李四, salary=5000.0]--李四工作不積極 // Emp [id=50, name=趙六, salary=6000.0]--趙六工作還不錯 // Emp [id=150, name=王五, salary=6000.0]--王五工作還不錯 // Emp [id=100, name=張三, salary=50000.0]--張三是一個好傢伙