multiMap 与 ListMultiMap

本文详细介绍了Multimap和ListMultimap在Java中的使用方法,对比了它们与传统HashMap的优劣,展示了如何利用Multimap和ListMultimap进行元素的高效添加、获取和删除操作,特别强调了key和value的重复性处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载:https://www.cnblogs.com/txfsheng/p/9510671.html
//传统的场景: Map<String,List> map = new HashMap<String,List>();

#缺点:向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 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值