Map之一个Key存多个Value的 MultiValueMap (一个键多个值)

623 查看

前言

好久没有写博客啦,今天来买个萌。
在日常的开发中经常用到键值对,也就是Map啦,我们知道Map是一个接口,它的特点是一个Key对应一个Value,也就是一个键对应一个值,但是往往我们需要一个Key对应多个Value,这种时候系统的API就无法满足我们的需要了,因此今天介绍一个我封装的一个Key对应多个Value,既一个键对应多个值的MultiValueMap
第二个,我们的MultiValueMap要想什么Key-Value都可以放,就要用到泛型,泛型不好的同学也不用担心,只要你用过MapHashMap我保准你看得懂。

MultiValueMap接口的定义

用过Map的人都知道,Map是一个接口(interface),所以我们这里也把MultiValueMap定义成一个接口。那么需要那些方法呢,我们来列个表:

  • 添加一个Key对应一个Value的:void add(K, V);
  • 添加一个Key对应多个Value的:void add(K, List);
  • 设置一个Key对应一个Value的:void set(K, V);
  • 设置一个Key对应多个Value的:void set(K, List);
  • 移除一个Key和它对应的Value:List remove(K);
  • 清除所有Value的:void clear();
  • 拿到所有Key的集合:Set keySet();
  • 拿到所有的值:List values();
  • 拿到一个Key对应的某个值:V getValue(K, index);
  • 拿到一个Key对应的所有Value:List getValues(K);
  • 拿到MultiValueMap的大小:int size();
  • 判断是否为空MultiValueMap:boolean isEmpty();
  • 判断是否包含某个Key:boolean containKey(K);

下面我们根据分析先把MultiValueMap接口定义出来,其实这个封装是我的开源项目NoHttp中提出来的,有兴趣的看官光顾下NoHttp,废话不多说,上代码: