我想实现这个。我将读取一个.txt文件,然后我将它从大字母转换为另一个.txt文件中的小写字母。然后我必须计算它们,以便找到最常见的字母或单词。我的问题是我应该使用哪种表格?我应该使用哈希还是地图表?.txt文件有大约5000000个字母单词句子。如果我想存储比较,计数和转换大文件,我必须使用的表是什么,以便我可以快速检索它。 我有一个哈希表
HashMap<String, String> hm = new HashMap<String, String>();
或者我应该用其他方式做到这一点? 或者我应该使用链表? 我如何为句子或单词实现它?
答案 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)
在这里查看http://www.ntu.edu.sg/home/ehchua/programming/java/J5c_Collection.html#zz-2.6
在这里http://www.ntu.edu.sg/home/ehchua/programming/java/J5c_Collection.html#zz-4。
在这里http://www.javapractices.com/topic/TopicAction.do?Id=65和我认为的bset在http://www.javamex.com/tutorials/collections/how_to_choose.shtml。
玩得开心
答案 3 :(得分:0)
我建议您可以使用数据库方法,也可以使用map来处理插入或更新计数方法。
Map<String, boolean>
。
您也可以使用批处理一次处理多个查询。