guava: multiMap 与 ListMultiMap


参考链接:https://blog.csdn.net/qq_37487520/article/details/78856868

使用场景及示例

//传统的场景:  Map<String,List<MyClass>> map = new HashMap<String,List<MyClass>>(); #缺点:向map里面添加元素不太方便,需要这样实现 void putMyObject(String key, Object value) { List<Object> myClassList = myClassListMap.get(key); if(myClassList == null) { myClassList = new ArrayList<object>(); myClassListMap.put(key,myClassList); } myClassList.add(value); } //补充: HashMap的key和value皆可为null,HashTable的key和value皆不可为null. 二者的key皆不可重复,若重复,后添加的会覆盖之前的. //上面传统的场景,可以使用ArrayListMultimap Multimap<String, String> multimap = ArrayListMultimap.create(); multimap.put("fruit", "bannana"); multimap.put("fruit", "apple");//key可以重复 multimap.put("fruit", "apple");//value可以重复,不会覆盖之前的 multimap.put("fruit", "peach"); multimap.put("fish","crucian");//欧洲鲫鱼 multimap.put("fish","carp");//鲤鱼 System.err.println(multimap.size());//6 Collection<String> fruits = multimap.get("fruit"); System.err.println(fruits);//[bannana, apple, apple, peach] for (String s : multimap.values()) { System.err.print(s + " , ");//bannana , apple , apple , peach , crucian , carp , } multimap.remove("fruit","apple"); System.err.println(fruits);//[bannana, apple, peach] 注意:这里只remove了一个apple,因此还有一个apple multimap.removeAll("fruit"); System.err.println(fruits);//[] #TODO: 如果将multimap 直接返回前端, 返回的数据是 {"empty":false} , 是否可以返回给前端,Lifu不清楚 //get(key) 返回的是collection,如果希望返回的是list,可以选择ListMultimap来接收create()的返回值 ListMultimap<String, String> listMultimap = ArrayListMultimap.create(); listMultimap.put("fruit", "bannana"); listMultimap.put("fruit", "apple"); listMultimap.put("fruit", "peach"); listMultimap.put("fish","crucian");//欧洲鲫鱼 listMultimap.put("fish","carp");//鲤鱼 List<String> fruits = listMultimap.get("fruit"); System.err.println(fruits);//[bannana, apple, peach] //对比 HashMultimap Multimap<String,String> multimap= HashMultimap.create(); multimap.put("fruit", "bannana"); multimap.put("fruit", "apple"); multimap.put("fruit", "apple"); System.err.println(multimap.size());//2 System.err.println(multimap.get("fruit"));//[apple, bannana] 注意: 这里只有一个apple


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM