<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # JAVA之旅(二十二)——Map概述,子類對象特點,共性方法,keySet,entrySet,Map小練習 * * * > 繼續堅持下去吧,各位騷年們! > > 事實上,我們的數據結構,只剩下這個Map的知識點了,平時開發中,也是能看到他的,所以還是非常值得去學習的一個知識點的,我們直接開車了 ## 一.Map概述 ![這里寫圖片描述](http://img.blog.csdn.net/20160626144031517) > 泛型 鍵值對,映射關系 > > 基本特點 * 該集合存儲鍵值對,是一對一對往里存,而且要保證鍵的唯一性? * 1.添加? * put(key ,values) * putAll() * 2.刪除? * clear() * remove(object key) * 3.判斷? * containsValue(Object value) * containsKey(Object key) * isEmpty() * 4.獲取? * get(Object key) * size() * values() * entrySet() * keySet() > 我們的學習步驟也是這樣來的, ## 二.子類對象特點 > Map有三個子類 * Hashtable? * 底層是哈希表數據結構,不可以存入null值或者鍵,該集合是線程同步的 ![這里寫圖片描述](http://img.blog.csdn.net/20160626151802694) * HashMap? * 底層是哈希表數據結構,允許使用null的鍵值對,線程是不同步的。效率高 ![這里寫圖片描述](http://img.blog.csdn.net/20160626152117471) * TreeMap? * 底層是二叉樹數據結構,線程不同步,可以用于給map集合中的鍵進行排序 > Map和Set很像,其實Set底層就是使用了Map集合 ## 三.共性方法 > 我們看一下他們的共同點 ~~~ package com.lgl.hellojava; import java.util.Collection; import java.util.HashMap; import java.util.Map; public class HelloJJAVA { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); // 添加元素 map.put("001", "zhangsan"); map.put("002", "lisi"); map.put("003", "wangwu"); System.out.println("原數據:"+map); // 判斷是否存在002的key System.out.println(map.containsKey("002")); //刪除 System.out.println(map.remove("002")); System.out.println("刪除后:"+map); //獲取 System.out.println("獲取:"+map.get("001")); //可以通過get方法的返回值來判斷一個鍵是否存在 map.put(null, "haha"); System.out.println("null:"+map); //獲取map集合中所有的值 Collection<String> values = map.values(); System.out.println("map的值:"+values); } } ~~~ > 這里可以看到輸出的結果 ![這里寫圖片描述](http://img.blog.csdn.net/20160626174139547) > 但是這里要注意的是,添加元素,如果添加的時候,相同的鍵,那么后面的,會被后添加的覆蓋原有的鍵對應的值,并put方法會返回被覆蓋的值 ## 四.keySet > 想取出他的值,他并沒有迭代器,那我們的思路可以轉變一下拿到他的所有的鍵再去get不就可以拿到鍵值對了,我們來看一下 * keySet? * 將map中所有的值存入到Set集合中,因為Set具備迭代器,所有可以迭代方法取出的所有的鍵,根據get方法,獲取每一個鍵對應的值 ~~~ package com.lgl.hellojava; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class HelloJJAVA { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("001", "zhangsan"); map.put("002", "lisi"); map.put("003", "wangwu"); // 先獲取map集合中的所有鍵的Set集合 Set<String> keySet = map.keySet(); // 有了Set集合就可以獲取迭代器 Iterator<String> iterator = keySet.iterator(); while (iterator.hasNext()) { String string = iterator.next(); // 有了鍵可以通過map集合的get方法獲取其對應的值 String value = map.get(string); System.out.println("key:" + string + "values:" + value); } } } ~~~ > 這種方法還是比較好理解的,對吧,但是這樣比較麻煩,我們來看另一種 ## 五.entrySet ~~~ package com.lgl.hellojava; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class HelloJJAVA { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("001", "zhangsan"); map.put("002", "lisi"); map.put("003", "wangwu"); // 將map集合中的映射關系取出,存入到Set集合中 Set<Entry<String, String>> entrySet = map.entrySet(); Iterator<Entry<String, String>> iterator = entrySet.iterator(); while (iterator.hasNext()) { Map.Entry<String, String> entry = iterator.next(); System.out.println(entry.getKey() + ":" + entry.getValue()); } } } ~~~ > 定義泛型雖然比較麻煩,但是取出來還是比較簡單的,原理是什么?其實我們可以寫一段偽代碼來說明的 ~~~ package com.lgl.hello; public class HashMap implements Map { class Hahs implements Map.Entry { @Override public Object getKey() { // TODO Auto-generated method stub return null; } @Override public Object getValue() { // TODO Auto-generated method stub return null; } } } interface Map { public static interface Entry { public abstract Object getKey(); public abstract Object getValue(); } } ~~~ > 父子接口,直接訪問,內部規則 ## 六.Map小練習 > 我們可以通過一個小練習來學習一下使用規則,而需求,我直接寫在注釋上 ~~~ package com.lgl.hellojava; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import java.util.Set; public class HelloJJAVA { public static void main(String[] args) { /** * 每個學生都有對應的歸屬地 學生Student,地址String 學生屬性:姓名和年齡 * 注意:姓名和年齡相同的視為同一個學生,保證學生的唯一性 * * 1.描述學生 2.定義Map容器,將學生作為鍵,地址作為值存入 3.獲取Map容器中的元素 */ HashMap<Student, String> hm = new HashMap<Student, String>(); hm.put(new Student("zhangsan", 15), "beijing"); hm.put(new Student("lisi", 16), "shanghai"); hm.put(new Student("wangwu", 17), "guangzhou"); hm.put(new Student("liliu", 10), "shenzhen"); // 第一種取出方式keySet Set<Student> keySet = hm.keySet(); Iterator<Student> iterator = keySet.iterator(); while (iterator.hasNext()) { Student student = iterator.next(); String addr = hm.get(student); System.out.println(student + ":" + addr); } //第二種取出方式 entrySet Set<Entry<Student, String>> entrySet = hm.entrySet(); Iterator<Entry<Student, String>> iterator2 = entrySet.iterator(); while (iterator2.hasNext()) { Entry<Student, String> next = iterator2.next(); System.out.println(next.getKey()+":"+next.getValue()); } } } /** * 描述學生 * * @author LGL * */ class Student implements Comparable<Student> { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } @Override public int hashCode() { // TODO Auto-generated method stub return name.hashCode() + age * 34; } @Override public boolean equals(Object obj) { if (!(obj instanceof Student)) throw new RuntimeException("類型不匹配"); Student s = (Student) obj; return this.name.equals(s.name) && this.age == s.age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Student s) { int num = new Integer(this.age).compareTo(new Integer(s.age)); if (num == 0) return this.name.compareTo(s.name); return num; } } ~~~ > OK,例子就是用兩種取出的方式罷了,相信你自己也一定能做好的,好的,我們本節課到這里也就結束了,下節再見 ## 有興趣的話,加下群:555974449 版權聲明:本文為博主原創文章,博客地址:http://blog.csdn.net/qq_26787115,未經博主允許不得轉載。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看