Java集合类之Map集合的特点及使用详解

 更新时间:2022年08月29日 11:00:44   作者:小新爱学习.  
这篇文章主要为大家详细介绍一下Java集合类中Map的特点及使用,文中的示例代码讲解详细,对我们学习Java有一定帮助,感兴趣的可以了解一下

1、Map集合概述和使用

1.1 Map集合概述

java.util
接口 Map<K,V>

类型参数:

K - 此映射所维护的键的类型

V - 映射值的类型

public interface Map<K,V>

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口。

Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。

Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。

Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如HashMap 类。

注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响 equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包含,但请格外小心:在这样的映射上equals 和 hashCode 方法的定义将不再是明确的。

1.2 Map集合常用方法

方法说明
boolean equals(Object o)比较指定的对象与此映射是否相等
V get(Object key)返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
V put(K key, V value)将指定的值与此映射中的指定键关联(可选操作)
void clear()从此映射中移除所有映射关系(可选操作)
boolean containsKey(Object key)如果此映射包含指定键的映射关系,则返回 true
boolean containsValue(Object value)如果此映射将一个或多个键映射到指定值,则返回 true
boolean isEmpty()如果此映射未包含键-值映射关系,则返回 true
V get(Object key)返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
Set keySet()返回此映射中包含的键的 Set 视图
Set<Map.Entry<K,V>> entrySet()返回此映射中包含的映射关系的 Set 视图

代码示例:

import java.util.*;

public class CollectionsDemo {

   public static void main(String[] args) {
      Map m1 = new HashMap(); 
      m1.put("Zara", "8");
      m1.put("Mahnaz", "31");
      m1.put("Ayan", "12");
      m1.put("Daisy", "14");
      System.out.println();
      System.out.println(" Map Elements");
      System.out.print("\t" + m1);
   }
}
package com.ithmm_01;

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

public class MapDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        Map<String,String> map = new HashMap<String,String>();

        //往集合添加元素
        map.put("2101","zhangxiaohau");
        map.put("2102","wangxiaoer");
        map.put("2103","liuyidao");


        //根据键删除对应元素
//        System.out.println(map.remove("2102"));//wangxiaoer
//        System.out.println(map.remove("2105"));//null

        //移除所有键值对元素
        //map.clear();//{}

        // boolean containsKey(Object key)
        //          如果此映射包含指定键的映射关系,则返回 true。

        System.out.println(map.containsKey("2101"));//true
        // boolean containsValue(Object value)
        //          如果此映射将一个或多个键映射到指定值,则返回 true。
        System.out.println(map.containsValue("liuyidao"));//true

        //boolean isEmpty() |如果此映射未包含键-值映射关系,则返回 true。
        System.out.println(map.isEmpty());//false

        System.out.println(map.size());//3

//        V get(Object key)	返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
        System.out.println(map.get("2101"));//zhangxiaohau

        System.out.println(map.get("2102")); //wangxiaoer


//        Set keySet()	返回此映射中包含的键的 Set 视图。
        System.out.println(map.keySet());//3[2103, 2102, 2101]

//        Collection<V> values()
//        返回此映射中包含的值的 Collection 视图。
        Collection<String> values = map.values();
        for(String value : values){
            System.out.println(value);//liuyidao  wangxiaoer  zhangxiaohau

        }
        //输出集合对象
        System.out.println(map);//


    }
}

总结:Map 接口中键和值一一映射. 可以通过键来获取值。

给定一个键和一个值,你可以将该值存储在一个 Map 对象。之后,你可以通过键来访问对应的值。

当访问的值不存在的时候,方法就会抛出一个 NoSuchElementException 异常。

当对象的类型和 Map 里元素类型不兼容的时候,就会抛出一个 ClassCastException 异常。

当在不允许使用 Null 对象的 Map 中使用 Null 对象,会抛出一个 NullPointerException 异常。

当尝试修改一个只读的 Map 时,会抛出一个 UnsupportedOperationException 异常。

1.3 Map集合的遍历

方法一:

操作:

  • 获取所有键的集合,用keySet()方法实现
  • 遍历键的集合,获取到每一个键,用增强for实现
  • 根据键去找值。用get(Object key)方法实现

代码示例:

package com.ithmm_01;
/**
 *  - 获取所有键的集合,用keySet()方法实现
 *  - 遍历键的集合,获取到每一个键,用增强for实现
 *  - 根据键去找值。用get(Object key)方法实现
 */

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

public class MapDemo02 {
    public static void main(String[] args) {
        //创建集合对象
        Map<String, String> map = new HashMap<String, String>();

        //往集合添加元素
        map.put("2101", "zhangxiaohau");
        map.put("2102", "wangxiaoer");
        map.put("2103", "liuyidao");

        //获取所有键的集合,用keySet()方法实现
        Set<String> keySet = map.keySet();

        //遍历键的集合,获取到每一个键,用增强for实现
        for (String key :keySet){
            // 根据键去找值。用get(Object key)方法实现
            String value = map.get(key);
            System.out.println(key + "," +value);
        }

    }
}

控制台输出:

2103,liuyidao
2102,wangxiaoer
2101,zhangxiaohau

方法二:

操作:

1.获取所有键值对对象的集合

Set<Map.Entry<K,V>> entrySet()返回此映射中包含的映射关系的 Set 视图。

2.遍历键值对对象的集合,得到每一个键值对对象

用增强for实现,得到每一个Map.Entry

3.根据键值对对象获取键和值

用getKey()方法得到键

用getValue()方法得到值

代码示例:

package com.ithmm_01;

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

public class MapDemo03 {
    public static void main(String[] args) {
        //创建集合对象
        Map<String, String> map = new HashMap<String, String>();

        //往集合添加元素
        map.put("2101", "zhangxiaohau");
        map.put("2102", "wangxiaoer");
        map.put("2103", "liuyidao");

        //获取所有键值对对象的集合
        Set<Map.Entry<String, String>> entrySet = map.entrySet();

        //遍历键值对对象的集合,得到每一个键值对对象
        //用增强for实现,得到每一个Map.Entry
        for (Map.Entry<String, String> ss : entrySet) {
            //根据键值对对象获取键和值
            String key = ss.getKey();
            String value = ss.getValue();

            System.out.println(key + "," + value);

        }
    }
}

控制台输出:

2103,liuyidao
2102,wangxiaoer
2101,zhangxiaohau

到此这篇关于Java集合类之Map集合的特点及使用详解的文章就介绍到这了,更多相关Java Map集合内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java多个线程同时执行的方法

    Java多个线程同时执行的方法

    这篇文章主要介绍了Java多线程处理文件详解与代码示例,通过本文的介绍和代码示例,我们了解了如何使用Java多线程来处理文件,使用多线程技术可以显著提高文件处理的效率,特别是对于大量文件的处理任务,需要的朋友可以参考下
    2024-12-12
  • Spring Data JPA命名约定查询实现方法

    Spring Data JPA命名约定查询实现方法

    这篇文章主要为大家介绍了Spring Data JPA命名约定查询实现方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 详解Log4j 日志文件存放位置设置

    详解Log4j 日志文件存放位置设置

    这篇文章主要介绍了详解Log4j 日志文件存放位置设置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Maven中央仓库地址配置大全

    Maven中央仓库地址配置大全

    这篇文章主要介绍了Maven中央仓库地址配置大全,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 基于Java实现图形验证码工具类

    基于Java实现图形验证码工具类

    这篇文章主要为大家详细介绍了如何基于Java实现图形验证码工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • jar中VO的探究

    jar中VO的探究

    这篇文章主要介绍了jar中VO的探究的相关资料,需要的朋友可以参考下
    2023-11-11
  • springboot + mybatis + druid + 多数据源的问题详解

    springboot + mybatis + druid + 多数据源的问题详解

    这篇文章主要介绍了springboot + mybatis + druid + 多数据源的问题详解,示例代码文字相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Java简单从文件读取和输出的实例

    Java简单从文件读取和输出的实例

    下面小编就为大家带来一篇Java简单从文件读取和输出的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • java之TreeUtils生成一切对象树形结构案例

    java之TreeUtils生成一切对象树形结构案例

    这篇文章主要介绍了java之TreeUtils生成一切对象树形结构案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • java实现点赞功能

    java实现点赞功能

    这篇文章主要为大家详细介绍了java实现点赞功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论