1. 程式人生 > 其它 >java--集合--Map集合

java--集合--Map集合

  1. Map介面常用方法
    1. Map介面的特點
        1. package com.model.map;
          
          import java.util.*;
          
          /**
           * @Description:測試類
           * @Author: 張紫韓
           * @Crete 2021/6/13 17:40
           */
          public class MapDemo01 {
              public static void main(String[] args) {
                  /**
                   * Map介面實現類的特點,使用實現類HashMap例項
                   * 1) Map與Collection並列存在。用於儲存具有對映關係的資料:Key-Value
                   * 2) Map中的key和value 可以是任何引用型別的資料,會封裝到HashMap$Node物件中 Node靜態內部類
                   * 3) Map中的key不允許重複,原因和HashSet一樣,前面分析過原始碼.
                   * 4) Map中的value可以重複
                   * 5) Map的key可以為null, value也可以為null ,注意key為null,只能有一個,
                   * value為null ,可以多個.
                   * 6)常用String類作為Map的key
                   * 7) key和value之間存在單向一對一關係,即通過指定的
                   * key總能找到對應的value
                   *
                   * 
          */ Map<Object, Object> hashMap = new HashMap<>(); hashMap.put("a", 1); hashMap.put("b", 2); hashMap.put("c", 1); hashMap.put("a", 2);//當有相同的key,會替換原來的的內容 hashMap.put("d", 1); System.out.println(hashMap.get("a")); } }
      1. Map存放資料是Key-Value的,一對K-V是存放在Node中的,又因為Node實現了Entry介面,Entry存放在在EntrySet中,我們可以通過EntrySet的getKey(),getValue(),進行遍歷 ,也可以通過hashMap.KeySet()和hashMap.values()的到EntrySet中所有的key的集合和所有Value的集合,EntrySet存放的Entry型別但是裡存放的資料實際型別是HashMap$Node型別

        1. package com.model.map;
          
          import java.util.Collection;
          import java.util.HashMap;
          import java.util.Map;
          import java.util.Set;
          
          /**
           * @Description:測試類
           * @Author: 張紫韓
           * @Crete 2021/6/14 15:23
           */
          public class MapDemo02 {
              //Map存放的資料是Key-Value 的鍵值對,存放在Table表中的Node靜態內部類中(HashMap$Node),
              //為了方便遍歷,我們在內部將 存放資料的Node類,封裝一個,轉為 Entry介面(為什麼能轉,因為Node類實現了Entry介面中)
              
          //(並不是正真的複製Node,只是entry中的k指向Node中的key,entry中的V指向了Node中的Value,所以EntrySet中資料的型別還是HashMap$Node型別的資料) // static class Node<K,V> implements Map.Entry<K,V> { // final int hash; // final K key; // V value; // Node<K,V> next; // 並將Entry介面放在放在了EntrySet集合中:transient Set<Map.Entry<K,V>> entrySet; // 為什麼要放在EntrySet中呢,為了方便遍歷,EntrySet中由兩個非常重要的方法 K getKey(); V getValue(); // keySet() ,Values() // public static void main(String[] args) { HashMap<Object, Object> hashMap = new HashMap<>(); hashMap.put("a", "a"); hashMap.put("b", "b"); Set<Map.Entry<Object, Object>> set = hashMap.entrySet(); for (Map.Entry entry:set){ System.out.println("EntrySet中存放放入是Entry,但是型別還是HashMap$Node型別"+entry.getClass()); System.out.println(entry.getKey()+"-"+entry.getValue()); } Collection<Object> values = hashMap.values(); //存放著table中所有的Value的Collection Set<Object> keySet = hashMap.keySet(); //存放者Table中所有的key 的set System.out.println(keySet+"-"+values); } }
    2. Map體系繼承圖

    3. Map介面的常用方法

    4. Map介面的遍歷方法

      1. package com.model.map;
        
        import java.util.*;
        
        /**
         * @Description:測試類
         * @Author: 張紫韓
         * @Crete 2021/6/14 17:18
         */
        public class MapDemo04 {
            public static void main(String[] args) {
                HashMap<Object, Object> map = new HashMap<>();
                for (int i = 0; i < 10; i++) {
                    map.put(new Integer(i), new Integer(i));
                }
                /**
                 * 第一組:取出所有的key
                 * keySet()方法
                 * */
                Set<Object> keySet = map.keySet();
        //        (1)增強for迴圈
                for (Object key:keySet){
                    System.out.println("增強for迴圈"+key+"-"+map.get(key));
                }
        //        (2)迭代器
                Iterator<Object> iterator = keySet.iterator();
                while (iterator.hasNext()) {
                    Object next =  iterator.next();
                    System.out.println("迭代器方式"+next+"-"+map.get(next));
                }
                /**
                 *
                 * 第二組:取出所有的Values
                 * values()方法
                 * */
                Collection<Object> values = map.values();
                //(1)增強for迴圈
                for (Object o:values){
                    System.out.println("增強for:"+o);
                }
                //(2)迭代器
                Iterator<Object> iterator1 = values.iterator();
                while (iterator1.hasNext()) {
                    Object next =  iterator1.next();
                    System.out.println("迭代器:"+next);
                }
                /**
                 *
                 * 第三組:使用EntrySet,的getKey()和getValue()方法實現遍歷
                 * */
                Set<Map.Entry<Object, Object>> entrySet = map.entrySet();
        //        (1)增強for迴圈
                for (Map.Entry entry:entrySet){
                    System.out.println(entry.getKey()+"-"+entry.getValue());
                }
        //        (2)迭代器
                Iterator<Map.Entry<Object, Object>> iterator2 = entrySet.iterator();
                while (iterator2.hasNext()) {
                    Map.Entry<Object, Object> next =  iterator2.next();
                    System.out.println(next.getKey()+""+next.getValue());
                }
            }
        }
    5. Map介面課堂練習

      1. package com.model.map;
        
        import java.util.HashMap;
        import java.util.Iterator;
        import java.util.Map;
        import java.util.Set;
        
        /**
         * @Description:測試類
         * @Author: 張紫韓
         * @Crete 2021/6/14 17:59
         */
        public class MapDemo05 {
            public static void main(String[] args) {
        
                Employee employee01 = new Employee("001", "a", 10000.0f);
                Employee employee02 = new Employee("002", "b", 20000.0f);
                Employee employee03 = new Employee("003", "c", 30000.0f);
                Map<Object, Object> hashMap = new HashMap<>();
                hashMap.put(employee01.getId(),employee01);
                hashMap.put(employee02.getId(),employee02);
                hashMap.put(employee03.getId(),employee03);
        
                Set<Object> keySet = hashMap.keySet();
                System.out.println("*********第一種*********");
                for (Object key:keySet){
                    Employee employee = (Employee) hashMap.get(key);
                    if (employee.getSal()>18000){
                        System.out.println(employee);
                    }
                }
                System.out.println("*********第二種**********");
                Iterator<Object> iterator = keySet.iterator();
                while (iterator.hasNext()) {
                    Object next =  iterator.next();
                    Employee employee = (Employee) hashMap.get(next);
                    if (employee.getSal()>18000){
                        System.out.println(employee);
                    }
                }
                System.out.println("***********第三種**********");
        
                Set<Map.Entry<Object, Object>> entrySet = hashMap.entrySet();
                for (Map.Entry entry:entrySet){
                    Employee employee = (Employee) entry.getValue();
                    if (employee.getSal()>18000){
                        System.out.println(employee);
                    }
                }
                System.out.println("***********第四種**********");
                Iterator<Map.Entry<Object, Object>> iterator1 = entrySet.iterator();
                while (iterator1.hasNext()) {
                    Map.Entry<Object, Object> next =  iterator1.next();
                    Employee employee = (Employee) next.getValue();
                    if (employee.getSal()>18000){
                        System.out.println(employee);
                    }
                }
        
                /**
                 * 通過得到所有的key (hashMap.KeySet())
                 * 通過得到所有的value (hashMao.Values())
                 * 通過的到所有的Entry<K,V> (Hash.entrySet())
                 *
                 * */
            }
        }
        class Employee{
            private String id;
            private String name;
            private Float sal;
        
            @Override
            public String toString() {
                return "Employee{" +
                        "id='" + id + '\'' +
                        ", name='" + name + '\'' +
                        ", sal=" + sal +
                        '}';
            }
        
            public String getId() {
                return id;
            }
        
            public void setId(String id) {
                this.id = id;
            }
        
            public String getName() {
                return name;
            }
        
            public void setName(String name) {
                this.name = name;
            }
        
            public Float getSal() {
                return sal;
            }
        
            public void setSal(Float sal) {
                this.sal = sal;
            }
        
            public Employee(String id, String name, Float sal) {
                this.id = id;
                this.name = name;
                this.sal = sal;
            }
        }
    6. HashMap階段小結

      1.