guava實(shí)用功能之Multiset,Multimap與Bimap

Multiset

無(wú)序+可重復(fù)
利用Multiset重新解決之前的字符串出現(xiàn)次數(shù)的問(wèn)題,可以很容易解決。
利用這個(gè)功能可以完成很多有用的功能,如可以用來(lái)統(tǒng)計(jì)網(wǎng)站會(huì)員訪問(wèn)的次數(shù)。
element();返回元素的容器
count();返回重復(fù)的次數(shù)

public static void main(String[] args) {
        String str = "this a cat and that is a mice where is the food";
        //分割字符串
        String[] strs = str.split(" ");
        //把字符串放進(jìn)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記錄出現(xiàn)的次數(shù)
        }
    }

Multimap

Multimap是鍵可以重復(fù)的map
這里的意思,內(nèi)部實(shí)現(xiàn)就是當(dāng)鍵重復(fù)時(shí),他的值不會(huì)覆蓋,而是存到對(duì)應(yīng)于鍵的一個(gè)容器里。這樣子我們可以用他來(lái)統(tǒng)計(jì)重復(fù)的具體內(nèi)容。
以下使用Multimap統(tǒng)計(jì)老師教授的課程

public static void main(String[] args) {
        //統(tǒng)計(jì)每個(gè)老師教的課程
        Map<String, String> map=new HashMap<>();
        map.put("電力電子技術(shù)","王偉");
        map.put("單片機(jī)","王偉");
        map.put("微機(jī)", "劉一帆");
        map.put("局域網(wǎng)", "劉一帆");
        map.put("高數(shù)", "李小偉");
        map.put("現(xiàn)控", "沈浩");
        
        Multimap<String, String> teachers=ArrayListMultimap.create();
        //迭代之前的map,吧元素存進(jìn)新的Multimap,但是用老師來(lái)當(dāng)做鍵,這樣子每個(gè)老師的課程就存在一起了
        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

鍵跟值都不能重復(fù)的map
因?yàn)殒I-值都不能重復(fù),所以可以反轉(zhuǎn)inverse();此時(shí)鍵值對(duì)調(diào),就可以通過(guò)值來(lái)找鍵了

public static void main(String[] args) {
        BiMap<String, String> map=HashBiMap.create();
        map.put("Viking", "viking@qq.com");
        map.put("good", "good@qq.com");
        //因?yàn)殒I-值都不能重復(fù),所以可以反轉(zhuǎn)inverse();反轉(zhuǎn),此時(shí)鍵值對(duì)調(diào),就可以通過(guò)值來(lái)找鍵了
        String usr=map.inverse().get("viking@qq.com");
        System.out.println(usr);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 教你如何迅速秒殺掉:99%的海量數(shù)據(jù)處理面試題 本文經(jīng)過(guò)大量細(xì)致的優(yōu)化后,收錄于我的新書《編程之法》第六章中,新書...
    Helen_Cat閱讀 7,575評(píng)論 1 39
  • 不可變集合類 為什么要使用不可變集合不可變對(duì)象有很多優(yōu)點(diǎn),包括: 當(dāng)對(duì)象被不可信的庫(kù)調(diào)用時(shí),不可變形式是安全的;不...
    icecrea閱讀 1,708評(píng)論 0 0
  • 1.順序容器 順序容器是將單一類型元素聚集起來(lái)成為容器,然后根據(jù)位置來(lái)存儲(chǔ)和訪問(wèn)這些元素。標(biāo)準(zhǔn)庫(kù)常用順序容器如下:...
    Mr希靈閱讀 852評(píng)論 0 4
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,623評(píng)論 18 399
  • 體系結(jié)構(gòu)與內(nèi)核分析續(xù) deque&queue 和 stack 深度探索 deque雙向隊(duì)列是一種雙向開口的連續(xù)線性...
    hjsadam閱讀 386評(píng)論 0 0

友情鏈接更多精彩內(nèi)容