首页 > 其他 > 详细

Map集合

时间:2020-03-16 18:09:46      阅读:62      评论:0      收藏:0      [点我收藏+]

Map集合

Map适用于保存具有映射关系的数据,因此Map集合中保存着两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value可以是任何类型的数据,key不允许重复,也就是任何两个key通过equals方法返回的都是false。

key与value之间是单向的一对一关系:通过指定的key,总能找到确定的一个value。

如果从Map键值对中key的角度来看:

Set与Map之间的关系非常密切。虽然Map中存放的是key-value键值对,Set中存放的是无顺序的元素,但如果把Map键值对中的value当作key的附属,那么整个Map集合其实就是一个keyset的Set集合。事实上Map提供了一个Entry内部类来封装key-value键值对,而计算Entry存储时只考虑封装Entry的key,从Java源码来看,Java是先实现了Map,然后通过包装一个所有value都为null的Map就实现了Set集合。

如果从Map键值对中value的角度来看:

把所有的value放在一起,它们又非常像一个List:元素与元素之间可以重复,每个元素可以通过索引来查找,只是Map中的索引不再使用整数值,而是使用key中的对象。因此,Map有时也被称为字典,或者关联数组。

Map的基础用法:

    Map map = new HashMap();
    map.put("saber","阿尔托莉雅");
    map.put("archer","吉尔伽美什");
    map.put("lancer","库丘林");
    System.out.println(map);
    //放入重复的key时,新的value会覆盖原来的value,并返回被覆盖的值
    System.out.println(map.put("saber","尼禄"));
    System.out.println(map);

    //判断是否包含指定key
    System.out.println(map.containsKey("saber"));
    //判断是否包含指定value
    System.out.println(map.containsValue("库丘林"));
    //获取Map集合中key的set集合,来遍历Map集合
    for (Object key : map.keySet()) {
        //get方法获取指定key的value值
        System.out.println(key+":"+map.get(key));
    }
    //根据key来删除value
    map.remove("lancer");
    System.out.println(map);

一些 Java 8 新增的方法:

package com.woshi;

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

public class MapTest {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("saber","阿尔托莉雅");
        map.put("archer","吉尔伽美什");
        map.put("lancer","库丘林");

        //尝试替换key为"rider"的value,由于原Map中没有对应的key
        //所以只会返回null,不会添加新的键值对
        map.replace("rider", "美杜莎");
        System.out.println(map);

        //如果获得的value为null,则直接用传入的value覆盖
        //如果不为null,则用原有的value和传入的值执行函数,得到新的计算结果,然后去覆盖原有的value
        map.merge("saber","潘德拉贡",(oldVal,param)-> (String)oldVal+(String)param);
        System.out.println(map);

        //当key的value为null,或者key不存在时,使用通过函数得到的新的计算结果作为value,或者创建新的键值对
        map.computeIfAbsent("rider", (key) -> "美杜莎");
        System.out.println(map);

        //当key的value存在且不为null,使用原key和value执行函数得到的新结果覆盖原来的value,如果得到的新结果为null,则删除该键值对
        map.computeIfPresent("rider",(key,value)->null);
        System.out.println(map);
        
        //遍历map
        map.forEach((key,value)-> System.out.println(key+":"+value));
    }
}

输出结果:

{lancer=库丘林, saber=阿尔托莉雅, archer=吉尔伽美什}
{lancer=库丘林, saber=阿尔托莉雅潘德拉贡, archer=吉尔伽美什}
{lancer=库丘林, saber=阿尔托莉雅潘德拉贡, archer=吉尔伽美什, rider=美杜莎}
{lancer=库丘林, saber=阿尔托莉雅潘德拉贡, archer=吉尔伽美什}
lancer:库丘林
saber:阿尔托莉雅潘德拉贡
archer:吉尔伽美什

Map集合

原文:https://www.cnblogs.com/woshi123/p/12504502.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!