Map集合

目录

Map集合

Map集合没有继承Collection接口,它提供了key-values的映射机制。一个key只能映射一个values,并且key不能相同。


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自定义类型对象的添加

示例代码如下:

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为例代码如下:

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的值。

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

方式二:通过entrySet()获得所有的key和values的值。

Set<Entry<String,String>> etries = map.entrySet();
getKey(),getVaues();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值