詳解java常用工具類「map介面的實現類」

java里的map介面和python里的map函數完全不同。雖然都具有映射關係,但是java的map介面更貼近字典和集合這兩個引用數據類型。這個介面是一個雙列集合它的元素是由鍵和值組成的,也就是keys和values。這個介面有兩個實現類:hashmap和treemap。hashmap內部維護一個hash順序,所以和我們宏觀里看到的順序不太一樣。下例是把這個集合里的所有的值遍歷出來。

javaMap介面的簡單使用
public class Example18 {
    public static void main(String[] args) {
        //直接獲取map里的值
        //map存儲的值是collection集合
        Map map = new HashMap();
        map.put("1","javaScript");
        map.put("2","Linux");
        map.put("3","Unix");
        Collection values = map.values();//把map對象里的值取出,轉換成collection集合類
        Iterator it = values.iterator();
        while (it.hasNext()){
            Object value = it.next();
            System.out.println(value);
        }
    }
}

這裡是通過一個java的迭代器把map里的所有元素迭代出來。這裡的get方法是根據輸入的鍵返回對應的值。這裡是不允許出現重複的元素,如果輸入了相同的鍵值對,則視為對該鍵對應的值修改。也就是如下例:

map.put("3","MacOS");

也就是把鍵為3的值修改了。簡而言之就是鍵相同,值修改。

很多初學者不適應hashmap里的讀取順序不是按照存入順序讀出來的,所以總想按照宏觀的順序讀取出來,我們可以使用LinkedHashMap類實現這一目的。它是用雙向鏈表來維護內部元素的關係,與LinkedList一樣。如下例:

public class Example19 {
    public static void main(String[] args) {
        //要想使得map對象里的存入時的值與讀取出來的值順序一致,則需要使用linkedhashmap類
        //內部維護一個雙向鏈表
        Map map = new LinkedHashMap();//使用linkedhashmap類就實現了存入與讀取順序一致
        map.put("1","Ubuntu");
        map.put("2","CentOS");
        map.put("3","SunOS");
        map.put("4","MacOS");
        Set keySet = map.keySet();//取出map對象里的鍵組成的集合
        Iterator it = keySet.iterator();//為什麼是keySet調用迭代器,因為是把鍵取出後存入keySet對象里的
        while (it.hasNext()){
            Object key = it.next();
            Object value = map.get(key);
            System.out.println(key+":"+value);
        }

    }
}

這樣就是實現了讀取與存放順序一致了。

javaMap介面的簡單使用

Treemap集合也是存儲鍵值對映射關係,不允許出現重複的鍵,內部是通過二叉樹原理實現的,所以就可以實現鍵不重複。它是由一個根組成的,往下劃分兩個子樹,由左子樹和右子樹組成,左子樹總是小於右子樹。

public static void main(String[] args) {
        //TreeMap集合
        //是通過二叉樹原理保證鍵的唯一性。TreeMap是按照某種順序排列的
        TreeMap tmap = new TreeMap();
        tmap.put("1","java");
        tmap.put("2","Linux");
        tmap.put("3","MacOS");
        tmap.put("4","Ubuntu");
        Set keyset = tmap.keySet();
        Iterator ior = keyset.iterator();
        while (ior.hasNext()){
            Object key = ior.next();
            Object value = tmap.get(key);
            System.out.println(key+":"+value);
        }
    }

它讀取的元素的順序和存儲的順序一致。因為編號是String類型,String類型實現了Comparable介面,因此默認會按照自然順序進行排序。

當使用TreeMap集合時,也可以自定義比較法。下面的例子就實現了自定義比較器。

public class Example21 {
    public static void main(String[] args) {
        /*
        * 實現自定義比較器,與二叉樹集合默認排序規則相反的排序
        * */
        TreeMap tm = new TreeMap(new MyComparator());
        tm.put("1","JavaScript");
        tm.put("2","java虛擬機");
        tm.put("3","Linux Kernel");
        Set keySet = tm.keySet();
        Iterator it = keySet.iterator();
        while (it.hasNext()){
            Object key = it.next();
            Object value = tm.get(key);//獲得鍵對應的值
            System.out.println(key+":"+value);
        }
    }
}
//實現自定義比較器
class MyComparator implements Comparator {
    public int compare(Object obj1,Object obj2){
        String id1 = (String) obj1; //把obj1強制轉換為String類型
        String id2 = (String) obj2;
        return id2.compareTo(id1);//把比較結果返回
    }
}

jdk幫我們預留了一個介面叫Comparator,我們使用implements實現這個介面。因為在java里所有的類的父類都是Object是默認繼承的。所以在集合中的數據類型都轉成Object類型。那麼我們要做的就是把Object類型轉譯成String類型。然後使用compareTo方法進行比較,這樣就實現了字典逆序。

Properties集合是map介面的一個實現類Hashtable與hashMap相似,hashtable的線程是安全的,存取元素時速度慢。Properties主要存儲字元串類型的鍵和值。

public static void main(String[] args) {
        //Properties集合是map介面的一個實現類Hashtable與hashMap相似。
        //hashtable的線程是安全的,存取元素時速度慢。
        //Properties主要存儲字元串類型的鍵和值

        //按順序存儲的順序讀取結果
        Properties p = new Properties();
        p.setProperty("1","C");//寫入Properties集合
        p.setProperty("2","JavaScript");
        p.setProperty("3","Node.js");
        /*
        * 通過調用propertyNames方法獲得一個包含所有鍵的Enumeration對象,
        * 在遍歷時調用getProperty方法獲取值
        *
        * */
        Enumeration names = p.propertyNames();//獲取Enumeration對象所有鍵的枚舉
        while (names.hasMoreElements()){
            String key = (String) names.nextElement();
            String value = (String) p.getProperty(key);//獲取鍵對應的值
            System.out.println(key+":"+value);
        }
    }

主要用於編寫配置項的,這個我在學Spring Boot這麼課的時候經常使用。它有getproperty()和setproperty()這兩個方法,用於讀寫配置。再詳細的就在代碼里寫的很完備了,直接看代碼就可以了。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/269148.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-16 13:13
下一篇 2024-12-16 13:14

相關推薦

發表回復

登錄後才能評論