英语文章单词统计程序思路

主要思路:文件读入文章,用HashMap 来存放出现的单词的次数,Key 是要统计的单词,Value 是单词出现的次数。最后再按照 Key 的升序排列出来。

{

HashMap:

 数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)

 线性链表:对于链表的新增,删除等操作(在找到指定操作位置后),仅需处理结点间的引用即可,时间复杂度为O(1),而查找操作需要遍历链表逐一进行比对,复杂度为O(n)

 二叉树:对一棵相对平衡的有序二叉树,对其进行插入,查找,删除等操作,平均复杂度均为O(logn)。

 哈希表:相比上述几种数据结构,在哈希表中进行添加,删除,查找等操作,性能十分之高,不考虑哈希冲突的情况下,仅需一次定位即可完成,时间复杂度为O(1),接下来我们就来看看哈希表是如何实现达到惊艳的常数阶O(1)的。

  我们知道,数据结构的物理存储结构只有两种:顺序存储结构链式存储结构(像栈,队列,树,图等是从逻辑结构去抽象的,映射到内存中,也这两种物理组织形式),而在上面我们提到过,在数组中根据下标查找某个元素,一次定位就可以达到,哈希表利用了这种特性,哈希表的主干就是数组

  比如我们要新增或查找某个元素,我们通过把当前元素的关键字 通过某个函数映射到数组中的某个位置,通过数组下标一次定位就可完成操作。

        存储位置 = f(关键字)

  其中,这个函数f一般称为哈希函数,这个函数的设计好坏会直接影响到哈希表的优劣。

摘自---作者: dreamcatcher-cx

出处: <http://www.cnblogs.com/chengxiao/>

}

{

程序:

import java.util.*;
import java.io.*;
 public class CountOccurrenceOfWords {
     public static void main(String[] args) throws Exception {
        Map hashMap = null;
        BufferedReader infile = null;
        StringTokenizer st = null;
        String filename = "Test.txt";
        String string;
        String file = null;
        //打开一篇文章,名字是 Test.txt .       

        infile = new BufferedReader(new FileReader(filename));
        while ((string = infile.readLine()) != null) {
            file += string;  //都出整篇文章,存入String中         }
         hashMap = new HashMap();
                // 取出文章中的单词,"," "." "!" " " 为各个单词的分界符   

         st = new StringTokenizer(file, " ,.!");
         while (st.hasMoreTokens()) {
            String key = st.nextToken();
            if (hashMap.get(key) != null) {
                int value = ((Integer) hashMap.get(key)).intValue();
                value++;
                hashMap.put(key, new Integer(value));
             } else {
                hashMap.put(key, new Integer(1));
            }
        }
                //按照单词的字母次序输出。       

        Map treeMap = new TreeMap(hashMap);
        Set entrySet = treeMap.entrySet();
         Iterator iterator = entrySet.iterator();
         while (iterator.hasNext()) {
             System.out.println(iterator.next());
        }
     }
 }
摘自   --------------------

作者:wangtongxiao
来源:CSDN
原文:https://blog.csdn.net/wangtongxiao/article/details/1646630?utm_source=copy

}

 

posted @ 2018-10-11 23:55  田智凯  阅读(541)  评论(0编辑  收藏  举报