一个实现对String类型数组进行统计的算法

算法的简单描述:
      有一个数组,里面的数据可能是重复的,比如:str[0]="a",str[1]="a",现在要实现一个算法,统计该str
数组中数据的取值空间是多少,各个值出现的次数是多少.改算法的描述如果在数据库中进行类似:
           select count(*) count,value value from tab_name group by value
这里我实现了一个算法,但不知道效率如何:


java 代码
  1. package com.snow;   
  2.   
  3. import java.util.HashMap;   
  4. import java.util.Map;   
  5.   
  6. /**  
  7.  *@author anwxAn Weixiao  
  8.  *@version $Id$  
  9.  */  
  10. public class GroupBy {   
  11.     private String[] initData = null;   
  12.     private Map map = new HashMap();   
  13.     /**  
  14.      * 欲进行筛选的数据  
  15.      * @param data  
  16.      */  
  17.     public GroupBy(String[] data){   
  18.         if((data==null)||(data.length==0))   
  19.            this.initData = new String[]{};   
  20.         else  
  21.            this.initData = data;   
  22.     }   
  23.     /**  
  24.      * 进行一次全数据扫描  
  25.      *  
  26.      */  
  27.     private void scanData(){   
  28.         for(String key:initData){   
  29.             filterData(key);   
  30.         }   
  31.     }   
  32.     /**  
  33.      * 过滤并记录该数据出现的次数  
  34.      * @param data  
  35.      */  
  36.     private void filterData(String data){
  37.         data = analyzeData(data);   
  38.         Integer count = map.get(data);   
  39.         if(count == null)map.put(data,1);   
  40.         else map.put(data,++count);   
  41.     }
  42.     /**  
  43.      * 对数组中的数据进行必要的处理  
  44.      * @param data  
  45.      */ 
  46.     private String analyzeData(String data){
  47.          if((data==null)||(data.trim().length==0))data = "";
  48.          else data = data.trim();
  49.          return data;
  50.     }  
  51.     /**  
  52.      * 执行分组操作  
  53.      * @return 排序后的结果集合  
  54.      */  
  55.     public Map groupBy(){   
  56.         scanData();   
  57.         //TODO do other business   
  58.         return map;   
  59.     }   
  60.     /**  
  61.      * 用于简单的测试,查看执行后的结果集  
  62.      * @param res  
  63.      */  
  64.     private void print(Map res){   
  65.         for(String key:res.keySet()){   
  66.             System.out.println(key+" has "+res.get(key));   
  67.         }   
  68.     }   
  69.     public static void main(String[] arg){   
  70.         GroupBy groupBy = new GroupBy(new String[]{"1","1","1","2","3","3"});   
  71.         Map res = groupBy.groupBy();   
  72.         groupBy.print(res);   
  73.     }   
  74. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值