Map接口的注意事项

Map接口的注意事项

Map集合是用来存放键值对的集合,因此在进行集合的各项操作之中比较特殊,下面主要列举一下Map接口的使用事项

1. 不能使用迭代输出Map中的全部内容

在这里插入图片描述

1.1 Iterator方式输出Map
package chapter_thirteen;

import java.util.*;


/**
 * Iterator输出map集合
 */
public class IteratorDemo04 {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<String,String>();          //声明Map对象,指定泛型类型

        map.put("Hello","World");
        map.put("Miss","You");
        map.put("Chian","World");
        map.put("努力奋斗","deku");                                     //增加内容

        //set集合存储的数据类型为Map的内部类Map.Entry类对象,其中键名为String,键值亦为String
        Set<Map.Entry<String,String>> set = map.entrySet();                 //声明一个Set集合,指定泛型
        Iterator<Map.Entry<String, String>> iterator = set.iterator();      //将Map接口实例化变成Set接口

        while (iterator.hasNext()){                                             //找到Map.Entry类实例
            Map.Entry<String,String> temp = iterator.next();
            System.out.println(temp.getKey() + "---->" + temp.getValue());      //输出key和value
        }
    }
}

运行结果

Chian---->World
Hello---->World
Miss---->You
努力奋斗---->deku

1.2 使用foreach输出map集合中的所有内容
package chapter_thirteen;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * foreach语句输出map集合
 */
public class ForeachDemo02 {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<String, String>();

        map.put("Hello","World");
        map.put("family","friend");
        map.put("today","tomorrow");
        map.put("yesterday","for years");               //向Map集合中添加元素信息,分为键名和键值

        Set<Map.Entry<String,String>> set = map.entrySet();         //获取Map集合内部的Map.Entry类集合,以set集合存储
        for (Map.Entry<String,String> entry: set){              //foreach循环遍历Map.Entry集合
            System.out.println(entry.getKey() + "---->" + entry.getValue());            //输出map集合中的所有信息
        }
    }
}

运行结果

yesterday---->for years
Hello---->World
today---->tomorrow
family---->friend

2. 直接使用非系统类作为key

在这里插入图片描述

2.1 输出String---->Person的映射
package chapter_thirteen;

import java.util.HashMap;
import java.util.Map;

//用于作为Value值的Person06类
class Person06{
    private String name;                    //声明名称
    private int age;                        //声明年龄

    public Person06(){}                         //无参构造方法
    public Person06(String name, int age) {     //含参数构造方法
        this.name = name;
        this.age = age;
    }

    //setter和getter方法
    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 String toString() {                      //覆写的toString()方法
        return "Person06{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class HashMapDemo06 {
    public static void main(String[] args) {
        Map<String,Person06> map = new HashMap<String, Person06>();      //实例化Map集合对象,key为String,value为Person06

        map.put("努力奋斗",new Person06("高立卫",20));
        map.put("deku",new Person06("孟小雨",20));
        map.put("Out Love",new Person06("哈哈",0));
        map.put("Our Heart",new Person06("Our Soul",1102));         //为集合中添加内容


        System.out.println(map.get("Our Heart"));               //输出键名为"Our Heart"对应的键值

    }
}

运行结果

Person06{name='Our Soul', age=1102}

2.2 输出Person---->String的映射
package chapter_thirteen;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * 覆写hashCode()和toString()方法的Person类
 * 判断new出来的匿名对象是否相等。
 */
class Person07{
    private String name;
    private int age;

    public Person07(){}
    public Person07(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) {                       //覆写equals()方法
        if (this == o) return true;
        if (!(o instanceof Person07)) return false;
        Person07 person07 = (Person07) o;
        return age == person07.age &&
                Objects.equals(name, person07.name);
    }

    @Override
    public int hashCode() {                             //覆写hashCode()方法
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {                              //覆写toString()方法
        return "Person07{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}


//测试类
public class HashMapDemo07 {
    public static void main(String[] args) {
        //集合map,其中key为Person07类对象,value为String类对象
        Map<Person07,String> map = new HashMap<Person07,String>();              //实例化map集合对象

        map.put(new Person07("高立卫",20),"努力奋斗");
        map.put(new Person07("孟小雨",20),"deku");
        map.put(new Person07("哈哈",0),"Our Love");
        map.put(new Person07("Our Soul",1102),"Our Heart");         //为集合中添加内容


        System.out.println(map.get(new Person07("哈哈",0)));          //输出根据特定的匿名取出的键值


    }
}

运行结果

Our Love

小伙伴们要在此处注意哦,如果此时Person07类未覆写equals()和hashCode()方法,

System.out.println(map.get(new Person07("哈哈",0)));

此句执行的结果将会是 null,因为匿名对象的地址是临时随机分配的,所以Map集合无法查找到,如果覆写了equals和hashCode方法根据name和age属性可以唯一确定一个对象,此时才可以查询的哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Gaolw1102

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

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

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

打赏作者

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

抵扣说明:

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

余额充值