LinkedMutiValueMap的使用(一个key对应多个value)

LinkedMutiValueMap来自Spring的 org.springframework.util包下,可以一个key对应多个value。

LinkedMutiValueMap的value统一用LinkedList保存,哪怕这只是插入一个字符串。

1. 添加数据

 MultiValueMap map = new LinkedMultiValueMap();
 //添加一个Key对应一个Value,
 map.add("key1", "value");
 // 添加一个Key对应多个Value,以list的形式添加
 map.add("key2", Lists.newArrayList("value1", "value2", "value3"));
 //设置一个Key对应一个Value
 map.set("key3", "value");
 // 设置一个Key对应多个Value,以list的形式添加
 map.set("key4", Lists.newArrayList("value1", "value2", "value3"));
 //打印输出value
 for (int i = 1; i <= 4; i++) {
    System.out.println("key" + i + "=" + map.get("key" + i));
 }

输出结果如下:

key1=[value]
key2=[[value1, value2, value3]]
key3=[value]
key4=[[value1, value2, value3]]

2. 当多个value插入到同一个key时

 MultiValueMap map = new LinkedMultiValueMap();
 map.add("key1", "value");
 map.add("key1", "new_value");
 map.set("key2", "value");
 map.set("key2", "new_value");
 System.out.println(map.get("key1"));
 System.out.println(map.get("key2"));

输出结果如下:

[value, new_value]
[new_value]

当使用add方法时,当key存在时会直接在原value所在的linkedlist上添加新的value;在使用set方法时,则会将原来的value覆盖,创建一个新的list。value为list时同理。

add、set方法源码如下:

    public void add(K key, @Nullable V value) {
        List<V> values = (List)this.targetMap.computeIfAbsent(key, (k) -> {
            return new LinkedList();
        });
        values.add(value);
    }
    
    public void set(K key, @Nullable V value) {
        List<V> values = new LinkedList();
        values.add(value);
        this.targetMap.put(key, values);
    }

猜你喜欢

转载自blog.csdn.net/qq_22200097/article/details/82620851
今日推荐