1. 程式人生 > >Java的集合:HashMap和TreeMap(學習篇9)

Java的集合:HashMap和TreeMap(學習篇9)

HashMap是Java中十分經典的資料結構,是Java類庫中為對映提供的兩個經典實現之一(另一個是TreeMap),它是一種雜湊對映,雜湊對映對鍵進行雜湊,雜湊或比較函式只能作用於鍵,按照索引對元素進行了分組。不同的鍵可能會計算出相同的陣列下標。

hashmap<k,v>泛型類實現了泛型介面Map<k,v>,hashmap中的絕大多數方法都是map<k,v>方法的實現,即把hashmap<k,v>物件的引用賦值給map<k,v>的介面變數,那麼介面就可以呼叫類實現的介面方法。雜湊對映用於儲存鍵值對,允許把任何數量的鍵值對儲存在一起。鍵不可以發生邏輯衝突,即不要兩個資料使用相同型別的鍵。如果出現兩個資料項對應相同的鍵,那麼先前雜湊對映當中的鍵值對將會被替換。雜湊對映在它需要更大記憶體空間的時候會自動擴容。對於陣列表和連結串列這兩種資料結構,如果要查詢它們儲存的某個特定元素卻不知道它的位置,就需要從頭開始訪問元素直到找到匹配的為止。如果資料結構中包含很多的元素,就會浪費時間。這時最好採用雜湊對映來儲存要查詢的資料,使用雜湊對映可以減少檢索的開銷。

在hashmap put一個物件時,如果已經存在相同的key值,則會替換原有的物件。

key的型別一般使用整形和字串,如Integer,String,Long(long的包裝類)等。像int,long等基本型別不能使用,在語法上是不支援的。

以下是雜湊對映中的一些常用方法

public void clear();   //清空雜湊對映

public Object clone();  //返回當前雜湊對映的一個克隆

public  boolean containKey(Object key)    //如果雜湊對映有鍵值對使用了引數指定的鍵,方法返回true,否則返回false。

public boolean containValue(Object key)   //如果雜湊對映的值是引數指定的值,方法返回true,否則方法就返回false。

public V get(Object key)      //返回鍵值對中作為key的值

public boolean isEmpty()     //如果對映中不含任何鍵值對,返回true,否則返回false

public V remove(Object key)   //刪除雜湊對映中鍵為引數指定的鍵值對,並返回鍵對應的相應值。

public int size()   //返回鍵值對的數目

遍歷:public Collection<V> values()方法返回一個實現Collection<V>介面類建立的物件,可以使用介面回撥技術,即將該物件的引用賦給Collection<V>介面變數,該介面變數可以回撥iterator()方法獲得一個Iterator物件,這個物件存放著雜湊對映中所有鍵值對中的值。

應用:因為hashmap是基於雜湊表實現的map,基於雜湊表本身在查詢效能上的優勢,適合用於編寫詞典性質的程式。相比之下,treemap是底層基於紅黑樹實現的map。顯著的特點是便於儲存於其中的元素可以實現有序的方式進行訪問,這對於需要以有序的方式通過鍵來取得相應值的場合是比較適用的。比如對於在校學生通過學號順序進行訪問。

treemap保證節點是按照節點中的關鍵字排列的。比如可以將一群學生分別按照英語成績和數學成績進行排序。

treemap有自然排序和定製排序兩種方式。自然排序,預設升序排序。TreeMap中的所有key必須實現comparable介面,而且所有key應該是同一個類的物件,否則將會丟擲ClassCastExpection異常。

定製排序,也就是自定義排序,你可以讓它倒序排序,按鍵值排序。