TreeSet使用和底層原理_Comparable介面
阿新 • • 發佈:2018-11-02
TreeSet 底層實際是 TreeMap 實現的,內部維持了一個簡化版的 TreeMap,通過 key 來儲存 Set 的元素。 TreeSet 內部需要對儲存的元素進行排序,因此,我們對應的類需要四線 Comparable 介面。這樣才能根據 compareTo() 方法比較物件之間的大小,才能進行內部排序 (TreeMap 對key進行升序排列)
package com.jianshun; import java.util.Set; import java.util.TreeSet; /** * 測試TreeSet * 熟悉Comparable介面(參考TreeMap) * @author Administrator * */ public class TestTreeSet { public static void main(String[] args) { Set<Integer> set = new TreeSet<Integer>(); set.add(300); set.add(200); set.add(600); for(Integer m : set){ System.out.println(m); } Set<Emp2> set2 = new TreeSet<Emp2>(); set2.add(new Emp2(100,"張三",3000)); set2.add(new Emp2(50,"李四",2000)); set2.add(new Emp2(150,"王五",8000)); set2.add(new Emp2(30,"趙六",20000)); for(Emp2 m : set2){ System.out.println(m); } } } //當key是一個自定義物件時; class Emp2 implements Comparable<Emp2>{ int id; String name; double salary; public Emp2(int id, String name, double salary) { super(); this.id = id; this.name = name; this.salary = salary; } public int compareTo(Emp2 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 "Emp2 [id=" + id + ", name=" + name + ", salary=" + salary + "]"; } }
執行結果:
200
300
600
Emp2 [id=50, name=李四, salary=2000.0]
Emp2 [id=100, name=張三, salary=3000.0]
Emp2 [id=150, name=王五, salary=8000.0]
Emp2 [id=30, name=趙六, salary=20000.0]