Java基础篇(10)—MultiValueMap(一个Key对应多个Value)

JAVA && Spring && SpringBoot2.x — 学习目录

在开发过程中,经常使用到Map这种数据接口,特点是一个key对应一个value。但是有时候一个key可能对应一组value。当然使用Map<K,List<V>>这种结构是可以满足需求的。今天所说的,便是继承Map<K,List<V>>接口的MultiValueMap类。

基础用法:

    @Test
    public void test() {
        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
        //为一个key增加多个value
        map.add("a", "你好");
        map.add("a", "世界");
        //为key设置value值;
        map.set("a","哈哈");
        List<String> list = map.get("a");
        list.forEach(System.out::println);

    }

内部原理

继承结构图.png

本质上LinkedMultiValueMap继承了Map<K,List<V>>接口。我们在这里重点看一下add方法和set方法。

    private final Map<K, List<V>> targetMap;
    @Override
    public void add(K key, @Nullable V value) {
        //如果不存在key,返回new LinkedList<>(),否则返回Value
        List<V> values = this.targetMap.computeIfAbsent(key, k -> new LinkedList<>());
        values.add(value);
    }

Java8 Map computeIfAbsent方法说明

    @Override
    public void set(K key, @Nullable V value) {
        //调用set方法时,创建一个新的LinkedList集合
        List<V> values = new LinkedList<>();
        values.add(value);
        this.targetMap.put(key, values);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。