本文介绍几种处理Map中一个key对多个value的方法。在JDK标准Map实现中当我们尝试在一个key下插入多个value,那么后续的value会覆盖前面的value。
2.将集合作为Value当要处理一个key对多个value的情况,可以将所有value存放在一个集合中。
这种方式处理有多种缺点并且容易产生错误。我们需要为每个key创建一个集合,同时检查集合是否存在并添加或删除值,在Java 8中可以利用compute()方法来简化代码。
3.使用Apache Commons Collections添加依赖
3.1 MutiMap
org.apache.commons.collections4.MultiMap接口定义了一个Map,每个key对应一个集合。
这个类非线程安全,4.1版本中已经废弃。
3.2 MultiValuedMap
org.apache.commons.collections4.MultiValuedMap这个接口有多种实现,如ArrayListValuedHashMap与HashSetValuedHashMap。
使用方式如下:
若不希望value重复那么可以使用HashSetValuedHashMap
但ArrayListValuedHashMap,HashSetValuedHashMap及HashSetValuedHashMap都不是线程安全的。为了线程安全可以使用UnmodifiableMultiValuedMap。
4.Guava Multimap4.1 LinkedHashMultimap
这个类按插入顺序存放插入元素
4.2 TreeMultimap
这个类按可以按自然序访问插入的元素
5.自定义MultiMap如果使用Guava,那么还可以使用Multimap.newMultimap()来定制我们的Map。
小结:一对多思路就是通过集合来存储元素,guava和apache collection为我们提供了现成的工具,如果想自定义还可以使用guava提供的扩展方法来实现。
Map出现重复Key值叠加到上一个key中Map出现重复Key值将下一个key值叠加在上一个key值中
以上为个人经验,希望能给大家一个参考,也希望大家多多支持七叶笔记。