guava实用功能之Multiset,Multimap与Bimap

Multiset

无序+可重复
利用Multiset重新解决之前的字符串出现次数的问题,可以很容易解决。
利用这个功能可以完成很多有用的功能,如可以用来统计网站会员访问的次数。
element();返回元素的容器
count();返回重复的次数

public static void main(String[] args) {
        String str = "this a cat and that is a mice where is the food";
        //分割字符串
        String[] strs = str.split(" ");
        //把字符串放进Multiset里面
        Multiset<String> set=HashMultiset.create();
        for(String temp:strs){
            set.add(temp);
        }
        //获取Multiset里的元素
        Set<String> eset=set.elementSet();
        for(String temp:eset){
            System.out.println(temp+"---------->"+set.count(temp));//count记录出现的次数
        }
    }

Multimap

Multimap是键可以重复的map
这里的意思,内部实现就是当键重复时,他的值不会覆盖,而是存到对应于键的一个容器里。这样子我们可以用他来统计重复的具体内容。
以下使用Multimap统计老师教授的课程

public static void main(String[] args) {
        //统计每个老师教的课程
        Map<String, String> map=new HashMap<>();
        map.put("电力电子技术","王伟");
        map.put("单片机","王伟");
        map.put("微机", "刘一帆");
        map.put("局域网", "刘一帆");
        map.put("高数", "李小伟");
        map.put("现控", "沈浩");
        
        Multimap<String, String> teachers=ArrayListMultimap.create();
        //迭代之前的map,吧元素存进新的Multimap,但是用老师来当做键,这样子每个老师的课程就存在一起了
        Iterator<Map.Entry<String, String>> it=map.entrySet().iterator();
        while(it.hasNext()){
            Entry<String, String> entry=it.next();
            String key=entry.getKey();
            String value=entry.getValue();
            
            teachers.put(value,key);
        }
        //获的键
        Set<String> keys=teachers.keySet();
        for(String key:keys){
            Collection<String> col=teachers.get(key);
            System.out.println(key+"---->"+col);
        }
    }

BiMap

键跟值都不能重复的map
因为键-值都不能重复,所以可以反转inverse();此时键值对调,就可以通过值来找键了

public static void main(String[] args) {
        BiMap<String, String> map=HashBiMap.create();
        map.put("Viking", "viking@qq.com");
        map.put("good", "good@qq.com");
        //因为键-值都不能重复,所以可以反转inverse();反转,此时键值对调,就可以通过值来找键了
        String usr=map.inverse().get("viking@qq.com");
        System.out.println(usr);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 教你如何迅速秒杀掉:99%的海量数据处理面试题 本文经过大量细致的优化后,收录于我的新书《编程之法》第六章中,新书...
    Helen_Cat阅读 12,132评论 1 39
  • 不可变集合类 为什么要使用不可变集合不可变对象有很多优点,包括: 当对象被不可信的库调用时,不可变形式是安全的;不...
    icecrea阅读 5,563评论 0 0
  • 1.顺序容器 顺序容器是将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素。标准库常用顺序容器如下:...
    Mr希灵阅读 4,114评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,607评论 18 399
  • 体系结构与内核分析续 deque&queue 和 stack 深度探索 deque双向队列是一种双向开口的连续线性...
    hjsadam阅读 2,701评论 0 0

友情链接更多精彩内容