java第八章集合中TreeMap的用法

java中的TreeMap方法是紅黑樹結構,每一個key-value節點作爲紅黑樹的一個節點,TreeMap存儲是會進行排序的,會根據key來對key-value鍵值對進行排序,其中排序方式也是分爲兩種,一種是自然排序,一種是定製排序

自然排序:TreeMap中所有的key必須實現Comparable接口,並且所有的key都應該是同一個類的對象,否則會報ClassCastException異常

定製排序:定義TreeMap時,創建一個comparator對象,該對象對所有的treeMap中所有的key值進行排序,採用定製排序的時候不需要TreeMap中所有的key必須實現Comparable接口

TreeMap判斷兩個元素相等的標準:兩個key通過compareTo()方法返回0,則認爲這兩個key相等

如果使用自定義的類來作爲TreeMap中的key值,且想讓TreeMap能夠良好的工作,則必須重寫自定義類中的equals()方法,TreeMap中判斷相等的標準是:兩個key通過equals()方法返回爲true,並且通過compareTo()方法比較應該返回爲0:

TreeMap對應的類圖結構

TreeMap中提供了一序列根據key順序訪問key-value的方法

~Map.Entry  firstEntry();返回該map中最小的key對應的key-value,若map爲空,則返回爲null;

~Object firstKey();返回該Map中最小的key值,若map爲空,則返回null;

~Map.Entry  lastEntry();返回map中最大的key對應的key-value,若map爲空,則返回爲null;

~Object  lastKey();返回該Map中最大的key值,若map爲空,則返回null;

~Map.Entry higerEntry(Object key);返回該map中大於指定key的最小的key-value鍵值對,若map爲空,則返回爲null;

~Object higherKey(Object key);返回該map中大於指定key的最小的key,若map爲空,則返回爲null;

~Map.Entry lowerEntry(Object key);返回該map中小於指定key的最大的key-value鍵值對,若map爲空,則返回爲null;

~Object lowerKey(Object key);返回該map中小於指定key的最大的key,若map爲空,則返回爲null;

~NavigableMap subMap(Object fromKey,boolean fromInclusive,object toKey,boolean toInclusive);返回該Map的子Map,他的key的範圍是從fomKey(是否包含取決於第二個參數)到toKey(是否包含取決於第四個參數)

~SortMap subMap(Object fromKey,Object toKey);返回Map 的子Map,其Key的範圍是從fromKey(包括)到toKey(不包括).

~SortedMap tailMap(Object fromKey):返回該Map的子Map.其key的範圍是大於fromKey(包括)的所有的key

~NavigableMap tailMap(Object fromKey,boolean inclusive);返回該Map的子Map.其key的範圍是大於fromKey(是否包括取決於第二個參數)的所有的key

~SortedMap tailMap(Object toKey):返回該Map的子Map.其key的範圍是小於toKey(包括)的所有的key

~NavigableMap tailMap(Object toKey,boolean inclusive);返回該Map的子Map.其key的範圍是小於toKey(是否包括取決於第二個參數)的所有的key

TreeMap中的key-value對是有序的,所以增加了訪問第一個,前一個,後一個,最後一個key-value對的方法,並提供了幾個從TreeMap中截取子TreeMap的方法

下面以自然排序爲例,簡單介紹TreeMap的使用方法

package collectionPackage;

import java.util.TreeMap;

 class TreeMapTest implements Comparable{
    
     int count;
    
    public TreeMapTest(int count){
        this.count=count;
    }
    public String toString(){
        return "count["+count+"]";
    }
    //重寫equal方法
    public boolean equal(Object o){
       if(this==o){
           return true;
         }
        if(null!=o&&TreeMapTest.class==o.getClass()){
            TreeMapTest tr= (TreeMapTest) o;
           return tr.count==count;
        }
        return false;
    }
    
    //根據count屬性值來判斷兩個對象是否相等
       @Override   
    public int compareTo(Object o) {
       TreeMapTest trTest= (TreeMapTest) o;
       //記住這個方法,是很好的判斷了3中情況的存在,1.count>r.count 返回1 ;2.count<r.count返回-1;3count=r.count返回0
       return count>trTest.count ? 1: count<trTest.count-1?-1:0;
    }
       
      
  

}
 
 public class R{
     public static void main(String[] args) {
         TreeMap treemap= new TreeMap();
         treemap.put(new TreeMapTest(3),"瘋狂java講義");
         treemap.put(new TreeMapTest(-5), "andior教程");
         treemap.put(new TreeMapTest(9), "平凡的世界");
         System.out.println("完整的treemap:"+treemap);
         System.out.println("map排序中第一個key-value鍵值對:"+treemap.firstEntry());
         System.out.println("map中排序的第一個key值:"+treemap.firstKey());
         System.out.println("map中在比new(2)小的子map:"+treemap.headMap(new TreeMapTest(2)));
         System.out.println("map中比new(12)小的最大的鍵值對:"+treemap.lowerEntry(new TreeMapTest(12)));
       
     }
 }

代碼運行結果:

完整的treemap:{count[-5]=andior教程, count[3]=瘋狂java講義, count[9]=平凡的世界}
map排序中第一個key-value鍵值對:count[-5]=andior教程
map中排序的第一個key值:count[-5]
map中在比new(2)大的最小的鍵值對:{count[-5]=andior教程}
map中比new(12)小的最大的鍵值對:count[9]=平凡的世界


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章