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));
            }
  • 相关阅读:
    多层结构中,事务的运用。
    A private conversation
    Sql Server 日志清理 (数据库压缩方法)
    Basic of Ajax
    Persin Buttons
    不知为什么无缘无故加到了一个“邯郸.net俱乐部”,想退出,找不到入口.....
    Wokflow designer not working when openning workflow in nonworkflow VS 2005 project
    GridView中如何取得隐藏列的值?
    Error: cannot obtain value
    Too late
  • 原文地址:https://www.cnblogs.com/haolnu/p/7413607.html
Copyright © 2011-2022 走看看