Java——Map集合

一、Map集合

1、概述

现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等, 这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即 java.util.Map 接口。

我们通过查看 Map 接口描述,发现 Map 接口下的集合与 Collection 接口下的集合,它们存储数据的形式不同,如下图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6gGOnOzb-1662611077842)()]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDfCqsVg-1662611077844)(file:///C:\Users\15651\AppData\Local\Temp\ksohtml4604\wps2.jpg)]

2、Map常用子类

在这里插入图片描述

二、 Map接口中的常用方法

在这里插入图片描述

Map接口的方法演示

public class MapDemo {  
    public static void main(String[] args) {  
		// 创建 map 对象
        HashMap<String, String> map = new HashMap<>();
          
		// 添加元素到集合
	
        map.put("aa","11");  
        map.put("bb","22");  
        map.put("cc","33");  
        map.put("cc","33");  
        System.out.println(map);
        // String remove(String key)  
        System.out.println(map.remove("cc"));
        // 看aa 对应的值是多少  
        System.out.println(map.get("aa"));  
        System.out.println(map);  
    }  
  
}

在这里插入图片描述

1、Map集合遍历键找值方式

在这里插入图片描述

代码演示

public class MapDemo1 {  
    public static void main(String[] args) {  
        HashMap<String, String> map = new HashMap<>();  
        // 添加 元素到集合  
        map.put("胡歌","霍建华");  
        map.put("郭德纲","于谦");  
        map.put("薛之谦","大张伟");  
        // 获取所有的键 获取键集  
        Set<String> keys = map.keySet();  
        // 遍历键集 得到 每一个键  
        for (String key:keys){  
            // key 就是键  
            // 获取对应的值  
            String value = map.get(key);  
            System.out.println(key+"的cp是:"+value);  
        }  
    }  
}

遍历图解

在这里插入图片描述

三、Entry键值对对象

在这里插入图片描述

1、Map集合遍历键值对方式

键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。

操作步骤与图解:

  1. 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示: entrySet() 。

  2. 遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。

  3. 通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示: getkey() getValue()

代码演示

public class MapDemo02 {  
    public static void main(String[] args) {  
        HashMap<String, String> map = new HashMap<>();  
        map.put("胡歌","霍建华");  
        map.put("郭德纲","于谦");  
        map.put("薛之谦","大张伟");  
	    //获取 所有的 entry 对象 entrySet 
	    Set<Map.Entry<String,String>> entrySet = map.entrySet();  
        // 遍历得到每一个 entry对象  
        for (Map.Entry<String,String> entry : entrySet){  
            String key = entry.getKey();  
            String value = entry.getValue();  
            System.out.println(key+"的cp是"+value);  
        }  
  
    }  
}

遍历图解
在这里插入图片描述

四、练习

1、HashMap存储自定义类型键值

练习:每位学生(姓名,年龄)都有自己的家庭住址。那么,既然有对应关系,则将学生对象和家庭住址存储到 map集合中。学生作为键, 家庭住址作为值。

注意,学生姓名相同并且年龄相同视为同一名学生。

编写学生类

package people;  
  
import java.util.Objects;  
  
public class Student {  
    private String name;  
    private int age;  
    public Student(){}  
    public Student(String name, int age) {  
        this.name = name;  
        this.age = 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 boolean equals(Object o) {  
        if (this == o) return true;  
        if (o == null || getClass() != o.getClass()) return false;  
        Student student = (Student) o;  
        return age == student.age &&  
                name.equals(student.name);  
    }  
  
    @Override  
    public int hashCode() {  
        return Objects.hash(name, age);  
    }  
  
    @Override  
    public String toString() {  
        return "Student{" +  
                "name='" + name + '\'' +  
                ", age=" + age +  
                '}';  
    }  
}

编写测试类

package people;  
  
import java.util.HashMap;  
import java.util.LinkedHashMap;  
import java.util.Set;  
  
public class StudentTest {  
    public static void main(String[] args) {  
        HashMap<Student, String> map = new LinkedHashMap<>();  
  
        // 添加元素  
        map.put(new Student("lisi",28),"上海");  
        map.put(new Student("wangwu",22),"上海");  
        map.put(new Student("zhaoliu",24),"上海");  
        map.put(new Student("zhouqi",25),"上海");  
        map.put(new Student("wangwu",22),"南京");  
  
        // 取出元素 键找值方式  
        Set<Student> keySet = map.keySet();  
        for (Student key:keySet){  
            String value = map.get(key);  
            System.out.println(key.toString()+"....."+value);  
        }  
    }  
  
}

在这里插入图片描述

2、LinkedHashMap

我们知道HashMap保证成对元素唯一,并且查询速度很快,可是成对元素存放进去是没有顺序的,那在HashMap下面有一个子类L么我们要保证有序,还要速度快怎么办呢?

LinkedHashMap,它是链表和哈希表组合的一个数据存储结构。

package people;  
  
import java.util.LinkedHashMap;  
import java.util.LinkedHashSet;  
import java.util.Map;  
import java.util.Set;  
  
public class LinkedHashMapDemo {  
    public static void main(String[] args) {  
        LinkedHashMap<String, String> map = new LinkedHashMap<>();  
        map.put("胡歌","霍建华");  
        map.put("郭德纲","于谦");  
        map.put("薛之谦","大张伟");  
        Set<Map.Entry<String,String>> entrySet = map.entrySet();  
        for (Map.Entry<String,String> entry : entrySet){  
            System.out.println(entry.getKey()+"  "+entry.getValue());  
        }  
    }  
  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂神我的神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值