wordcount的Java实现(hashmap hashset)

来源:互联网 发布:java 读取txt文件 编辑:程序博客网 时间:2024/06/14 13:01

对于字符的wordcount肯定是每个计算框架和系统必备的例子或者函数,虽然功能是一样的,但是不同情况要求是不一样的,代码也不可能完全一样,这里只分析了对一个数组进行统计的例子,其他复杂的方法也可以在这个基础上改进,想看看专业软件的底层代码是怎么写的也没找到,自己写了个就当学习交流用吧,上面的方法思路是借鉴别人的,但觉得资源比较浪费,使用限制也多。还是先把结果贴出来吧:

{1=1, 2=1, 3=5, 4=1, 5=1, 8=2}
{1=1, 2=1, 3=5, 4=1, 5=1, 8=2}

package test;import java.util.HashMap;import java.util.HashSet;import java.util.Map;/** *  * 统计每一个数字在无序数组中出现的次数。例如输入排序数组 {1,2,3,3,3,3,3,4,5} * 这里有两个方法,一个hashmap直接遍历,一个hashmap和hashset结合。 * */public class SortCount {/**这种方法是通过hashmap集合实现的,实现了key,value对的存储,*类似于mapreduce框架的模型原理,这里用map进行存储的话是不会*存在相同key的,如果新的key和旧的key相同,就会把旧的key中的value*删除,用新的key中的value替代,key会自动进行排序。实现原理为把最后*出现的不重复key, value对作为集合最终结果输出*/public void hashmap(){int[] arry={1,2,8,3,8,3,3,3,3,4,5};Map<Integer,Integer> map=new HashMap<Integer,Integer>();for (int i = 0; i < arry.length; i++) {int temp1=arry[i];int count=0;for (int j = 0; j < arry.length; j++) {int temp2=arry[j];if(temp1==temp2){count++;}map.put(arry[i], count);}}System.out.println(map.toString());}/* * 通过原理的话我们发现上面的方法有点浪费资源,在大数据情况下肯定效率不高, * 它对每一个数据都在进行一个全集合的遍历,过程中相当于建立一个笛卡尔积吧, * 而只有最后出现的元素遍历时得到的数据才是有用的,那还有一个集合叫hashset, * 这个集合是会进行判断的,如果放进去的元素是重复的(判断方法可以自己定义), * 那么就会取消操作,并返回一个布尔值,所以两个表关联操作就可以只用一次遍历 * 得到最后结果。其实原理很简单,想到就能写下来。 */public void hashset(){ HashSet<Integer> hs = new HashSet<Integer>(); Map<Integer,Integer> map=new HashMap<Integer,Integer>(); int[] arry= {1,2,8,3,8,3,3,3,3,4,5}; int count =1;        for (int i : arry) {        //hs.add(i)是布尔类型的if(hs.add(i)) {map.put(i, count);continue;}//get(i)是获得对应的value值map.put(i, map.get(i)+1);}     System.out.println(map);   }public static void main(String args[]){SortCount a1 = new SortCount();a1.hashmap();a1.hashset();}}