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属性可以唯一确定一个对象,此时才可以查询的哦~

猜你喜欢

转载自blog.csdn.net/weixin_43479947/article/details/107346893
今日推荐