zoukankan      html  css  js  c++  java
  • Guava源码阅读-collect-Multiset

    package com.google.common.collect;

    我们在进行字符统计时,同常采用的方法就是:

            String[] text=new String[]{"the weather is good ","today is good","today has good weather","good weather is good"};  
            HashMap<String, Integer> hashMap=new HashMap<String, Integer>();  
            for (int i=0;i<text.length;i++){  
                String temp=text[i];  
                String[] words=temp.split("\s");  
                for(int j=0;j<words.length;j++){  
                    if(!hashMap.containsKey(words[j])){  
                        hashMap.put(words[j], new Integer(1));  
                    }else{  
                        int k=hashMap.get(words[j]).intValue()+1;  
                        hashMap.put(words[j], new Integer(k));  
                    }  
                }  
            }  
    

     这种方法的思想就是:首先建立一个Map,key值存储单词,value存储出现次数,在循环添加单词,如果没有相同的key,则将单词添加到key中,并设置它的value值为1,如果map中含有相同的key,则将对应的value值加1。

    这种方法冗余且容易出错。guava设计了一个集合类,Multiset,就是今天我们要介绍的。

    先看看Multiset怎么进行词频统计的:

         String[] text=new String[]{"the weather is good ","today is good","today has good weather","good weather is good"};  
            Multiset<String> set = HashMultiset.create(list);for (int i=0;i<text.length;i++){  
                String temp=text[i];  
                String[] words=temp.split("\s");  
                for(int j=0;j<words.length;j++){  
                  set.add(words[j]);
                }  
            }  
        在获取某个单词的个数时:    
        System.out.println(set.count("the")); //这样就可以了哦

    简单吧,Mutiset解决了我们很多问题,从类名上我们就可以知道这个set集合可以存放相同的元素。

    现在看看它的主要用法:

    Multiset接口定义的接口主要有:
        add(E element) :向其中添加单个元素
        add(E element,int occurrences) : 向其中添加指定个数的元素
        count(Object element) : 返回给定参数元素的个数
        remove(E element) : 移除一个元素,其count值 会响应减少
        remove(E element,int occurrences): 移除相应个数的元素
        elementSet() : 将不同的元素放入一个Set中
        entrySet(): 类似与Map.entrySet 返回Set<Multiset.Entry>。包含的Entry支持使用getElement()和getCount()
        setCount(E element ,int count): 设定某一个元素的重复次数
        setCount(E element,int oldCount,int newCount): 将符合原有重复个数的元素修改为新的重复次数
        retainAll(Collection c) : 保留出现在给定集合参数的所有的元素
        removeAll(Collectionc) : 去除出现给给定集合参数的所有的元素

    实例:

          Multiset<String> wordsMultiset = HashMultiset.create();
            wordsMultiset.addAll(wordList);
            
            
            
            for(String key:wordsMultiset.elementSet()){
                System.out.println(key+" count:"+wordsMultiset.count(key));
            }
            
            if(!wordsMultiset.contains("peida")){
                wordsMultiset.add("peida", 2);
            }
           
    
         for(String key:wordsMultiset.elementSet()){
                System.out.println(key+" count:"+wordsMultiset.count(key));
            }
            
            
            if(wordsMultiset.contains("peida")){
                wordsMultiset.setCount("peida", 23);
            }
            
            System.out.println("============================================");
            for(String key:wordsMultiset.elementSet()){
                System.out.println(key+" count:"+wordsMultiset.count(key));
            }
            
            if(wordsMultiset.contains("peida")){
                wordsMultiset.setCount("peida", 23,45);
            }
            
            System.out.println("============================================");
            for(String key:wordsMultiset.elementSet()){
                System.out.println(key+" count:"+wordsMultiset.count(key));
            }
            
            if(wordsMultiset.contains("peida")){
                wordsMultiset.setCount("peida", 44,67);
            }
            
            System.out.println("============================================");
            for(String key:wordsMultiset.elementSet()){
                System.out.println(key+" count:"+wordsMultiset.count(key));
            }
  • 相关阅读:
    Kali Linux渗透基础知识整理(二)漏洞扫描
    Elasticsearch为记录添加时间戳timestamp
    手把手带你使用JS-SDK自定义微信分享效果
    SpringBoot学习(3)-SpringBoot添加支持CORS跨域访问
    Java 骚操作--生成二维码
    清除微信内置浏览器缓存
    使用python脚本Telnet 华为交换机备份配置
    如何备份思科、锐捷、Juniper的配置文件
    微信公众平台开发教程Java版(六) 事件处理(菜单点击/关注/取消关注)
    How do you build a database?
  • 原文地址:https://www.cnblogs.com/haolnu/p/7413607.html
Copyright © 2011-2022 走看看