上篇文章我們介紹了HashMap集合,這是一個(gè)鍵值對(duì)集合,可以高效的按照鍵查找數(shù)值。但是它有一個(gè)缺陷:數(shù)據(jù)如果是無(wú)序的可以是很高效的,但是如果數(shù)據(jù)需要排列有順序就不適合了。本篇將要介紹的一個(gè)集合是樹(shù)集鍵值對(duì)(TreeMap),它能夠?qū)?shù)據(jù)按照鍵值有序的存儲(chǔ)。
     在介紹TreeMap之前,我們來(lái)了解一種數(shù)據(jù)結(jié)構(gòu):排序二叉樹(shù)。相信學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)的同學(xué)知道,這種結(jié)構(gòu)的數(shù)據(jù)存儲(chǔ)形式在查找的時(shí)候效率非常高。

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

如圖所示,這種數(shù)據(jù)結(jié)構(gòu)是以二叉樹(shù)為基礎(chǔ)的,所有的左孩子的value值都是小于根結(jié)點(diǎn)的value值的,所有右孩子的value值都是大于根結(jié)點(diǎn)的。這樣做的好處在于:如果需要按照鍵值查找數(shù)據(jù)元素,只要比較當(dāng)前結(jié)點(diǎn)的value值即可(小于當(dāng)前結(jié)點(diǎn)value值的,往左走,否則往右走),這種方式,每次可以減少一半的操作,所以效率比較高。在實(shí)現(xiàn)我們的TreeMap中,使用的是紅黑樹(shù)(一種優(yōu)化了的二叉排序樹(shù))。

     一、TreeMap的超接口
     TreeMap主要繼承了類AbstractMap(一個(gè)對(duì)Map接口的實(shí)現(xiàn)類)和 NavigableMap(主要提供了對(duì)TreeMap的一些高級(jí)操作例如:返回第一個(gè)鍵或者返回小于某個(gè)鍵的視圖等)。主要的一些操作有:put添加元素到集合中,remove根據(jù)鍵值或者value刪除指定元素,get根據(jù)指定鍵值獲取某個(gè)元素,containsValue查看是否包含某個(gè)指定的值,containsKey 查看是否包含某個(gè)指定的key數(shù)值等。

     二、構(gòu)造函數(shù)
           TreeMap 的構(gòu)造函數(shù)主要有以下幾種:

    private final Comparator<? super K> comparator;    
    public TreeMap() {comparator = null;}    
    public TreeMap(Comparator<? super K> comparator) {        this.comparator = comparator;
    }

網(wǎng)友評(píng)論