3

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

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

还是我应该用其他方式来做?或者我应该使用链表?我如何为句子或单词实现它?

4

4 回答 4

1

如果要数字母,aMap<Character, Long>甚至Map<Character, BigInteger>似乎更合适。具体的实现并不那么重要。如果您的字母集已定义并减少(例如拉丁字母),您甚至可以使用BigInteger[],每个字母都可以轻松地替换为其在数组中的顺序。

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

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

于 2012-10-11T18:59:58.440 回答
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如果您决定采用这种方法,则可能需要线程安全。

于 2012-10-11T20:03:39.883 回答
0

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

Map<String, boolean>
.

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

于 2012-10-11T19:08:59.417 回答