<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • map接口的實現類(詳解java常用工具類)


    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()這兩個方法,用于讀寫配置。再詳細的就在代碼里寫的很完備了,直接看代碼就可以了。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费