适用于java中大文本存储和计数的表

时间:2012-10-11 18:54:31

标签: java data-structures string-comparison

我想实现这个。我将读取一个.txt文件,然后我将它从大字母转换为另一个.txt文件中的小写字母。然后我必须计算它们,以便找到最常见的字母或单词。我的问题是我应该使用哪种表格?我应该使用哈希还是地图表?.txt文件有大约5000000个字母单词句子。如果我想存储比较,计数和转换大文件,我必须使用的表是什么,以便我可以快速检索它。 我有一个哈希表

    HashMap<String, String> hm = new HashMap<String, String>();

或者我应该用其他方式做到这一点? 或者我应该使用链表? 我如何为句子或单词实现它?

4 个答案:

答案 0 :(得分:1)

如果你想数字,Map<Character, Long>甚至Map<Character, BigInteger>似乎更合适。具体实施并不重要。如果你的字母组被定义和缩小(比如拉丁字母),你甚至可以使用BigInteger[],每个字母都可以很容易地被数组中的顺序替换。

对于这些数字中的句子或单词,我会选择数据库方法,为每个要计算的值添加一行。

更新:具有数据结构的单词和句子的替代方法可以是树。 rood节点是空字,如果你从root找到“爸爸”,你得到孩子“d”,它的孙子“a”和它的大孩子“d”,此时你将1添加到最后一个节点的指针(当然,如果缺少任何节点,你必须创建它们。)

答案 1 :(得分:1)

您的每项要求都需要Map。对于句子:

Map<String, Integer> sentences = new HashMap<String, Integer>();

对于单词,相同:

Map<String, Integer> words = new HashMap<String, Integer>();

最后,对于字符,请使用以下内容:

Map<Character, Integer> chars = new HashMap<String, Integer>();

HashMap应该是您使用的Map实施,因为您将在这些地图中进行大量搜索。计数过程确实适用于多个线程,因此如果您决定使用该方法,则可能需要线程安全的Map

答案 2 :(得分:1)

答案 3 :(得分:0)

我建议您可以使用数据库方法,也可以使用map来处理插入或更新计数方法。

Map<String, boolean>

您也可以使用批处理一次处理多个查询。