Map集合

目錄
    Map集合
    Map接口中經常使用的方法
    Map方法的使用
    Map自定義類型對象的添加
    Map結合List的代碼優化
    總結java

Map集合

    Map集合沒有繼承Collection接口,它提供了key-values的映射機制。一個key只能映射一個values,而且key不能相同。ide

Map接口中經常使用的方法

方法 功能及描述
put(K key,V values) 向集合中添加指定的key與values的映射關係
containsKey(Object key) 若是此映射關係包含指定的key,則返回true
containsValues(Object values) 若是次映射將一個或多個key映射到指定值,則返回true
get(Object key) 若是存在指定key的對象則返回對應的值,不然返回null
keySet() 返回集合中全部key對象造成的Set集合
values() 返回集合中全部值對象造成的Collection集合

Map方法的使用

    示例代碼以下:優化

package test;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Test2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<String, String> map = new HashMap<>();
        map.put("陳小春", "32");//向Map集合中添加對象實例
        map.put("渣渣輝", "20");
        map.put("苦甜樂", "19");
        map.put("陳小春", "40");
        //遍歷輸出全部的鍵以及對應的值
        for (Entry<String, String> string : map.entrySet()) {
            System.out.println(string);
        }
        System.out.println("containsKey(Object key)="+map.containsKey("陳小春"));//存在指定key,返回true
        System.out.println("containsKey(Object key)="+map.containsKey("成龍"));//不存在指定key,返回false
        System.out.println("containsValues(Object values)="+map.containsValue("32"));//存在指定values,返回true
        System.out.println("containsValues(Object values)="+map.get("陳小春"));//不存在指定key,返回false
        Set<String> set1 = map.keySet();//構建Map集合中全部key的集合
        Iterator<String> iterator = set1.iterator();//建立集合迭代器
        //遍歷輸出
        while(iterator.hasNext()) {
            System.out.println("key="+iterator.next());
        }

        Collection<String> set2 = map.values();//構建Map集合中全部key對象
        //遍歷輸出
        for (String string : set2) {
            System.out.println(string);
        }
    }
}

Map自定義類型對象的添加

    示例代碼以下:this

package com.vince;

public class Student1 {

    private String name;
    private char sex;
    private Integer age;

    public String getName() {
        return name;
    }

    public char getSex() {
        return sex;
    }

    public Integer getAge() {
        return age;
    }

    public Student1(String name, char sex, Integer age) {
        super();
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    @Override
    public String toString() {
        return "姓名:" + getName() + "\t性別:" + sex + "\t年齡:" + age;
    }
}
package test;
import java.util.HashMap;
import java.util.Map;
import com.vince.Student1;

public class Test3 {

    public static void main(String[] args) {
        // TODO 向Map集合中存放自定義類型
        // key的存放特色與Set一致,不能重複存放
        // 當出現相同的key時,對應的values會被覆蓋
        Map<String, Student1> set = new HashMap<>();
        set.put("001", new Student1("程曉春", '男', 50));
        set.put("002", new Student1("古天樂", '男', 50));
        set.put("003", new Student1("渣渣輝", '男', 30));
        set.put("001", new Student1("程曉春", '女', 26));
        for (String key : set.keySet()) {
            System.out.println("" + key + "" + set.get(key));
        }
    }
}

Map結合List的代碼優化

    以List爲例代碼以下:spa

package com.vince;

public class Student {
        private Integer studentNumber;
        private String name;
        private char sex;
        private Integer age;

        public Integer getStudentNumber() {
            return studentNumber;
        }
        public String getName() {
            return name;
        }
        public char getSex() {
            return sex;
        }
        public Integer getAge() {
            return age;
        }
        public Student(Integer studentNumber, String name, char sex, Integer age) {
            super();
            this.studentNumber = studentNumber;
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
        @Override
        public String toString() {
            return "學號:" + getStudentNumber() + "\t姓名:" + getName() + "\t性別:" + sex + "\t年齡:" + age;
        }
}
package test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.vince.Student;

public class pratice3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // TODO 使用集合存放兩個班級的學生,要求每一個班級中有三個學生
        // 可以單獨得到每一個班級的學生信息,同時可以直接得到全部學生信息
        List<Student> class1 = new ArrayList<>();
        class1.add(new Student(11, "小胡", '男', 11));
        class1.add(new Student(12, "小林", '女', 22));
        class1.add(new Student(13, "小白", '男', 21));

        List<Student> class2 = new ArrayList<>();
        class2.add(new Student(21, "小紅", '女', 11));
        class2.add(new Student(25, "小明", '男', 14));
        class2.add(new Student(23, "小琴", '女', 18));

        Map<String, List<Student>> className = new HashMap<>();
        className.put("一班", class1);
        className.put("二班", class2);
        //輸出一班的學生
        for (Student student : class1) {
            System.out.println(student);
        }

        System.out.println();
        //輸出添加後學生的全部信息
        class1.add(new Student(32,"王五",'男',32));
        for (String key : className.keySet()) {
            for (Student student : className.get(key)) {
                System.out.println(key+student);
            }
        }
    }
}

總結

    Map接口經常使用的實現類有HashMap和TreeMap,因爲HashMap實現向Map集合中添加和刪除映射關係效率更高,因此通常使用HashMap較多。TreeMap中的映射關係存在必定的順序,若是想使Map集合中的對象也存在必定的順序,則考慮使用TreeMap實現Map集合。 
HashMap構造方法中有一個默認的初始容量(16)和默認的加載因子(0.75)的空的構造方法,也可使用帶參的HashMap構造方法設定初始容量值和加載因子。加載因子的範圍在0~1之間,加載因子越大查詢的效率越低,加載因子越小,查詢效率就越高,對內存的要求就越高。 
向Map集合中添加對象實例是經過put(K key,V values)方法來實現的。對Map集合中的對象實例的遍歷有兩種方式: 
    方式一:經過keySet()方法來得到key的集合,再根據get(key)的方法來得到values的值。code

Set<String> keys = map.KeySet();
map.get(key);

    方式二:經過entrySet()得到全部的key和values的值。對象

Set<Entry<String,String>> etries = map.entrySet();
getKey(),getVaues();
相關文章
相關標籤/搜索