我正在编写一个严格读取文本文件(.txt)的java应用程序.这些文件最多可包含120,000个单词.
该应用程序需要存储所有+120,000字.它需要将它们命名为word_1,word_2等.它还需要访问这些单词以对它们执行各种方法.
这些方法都与字符串有关.例如,将调用一个方法来说明word_80中有多少个字母.将调用另一种方法来说明word_2200中的特定字母.
另外,有些方法会比较两个单词.例如,将调用一个方法来将word_80与word_2200进行比较,并且需要返回具有更多字母的方法.将调用另一种方法将word_80与word_2200进行比较,并且需要返回两个单词共享的特定字母.
我的问题是:由于我几乎只使用Strings,最好将这些单词存储在一个大型ArrayList中吗?几个小的ArrayLists?或者我应该使用其他许多存储可能性之一,如Vectors,HashSets,LinkedLists?
我的两个主要问题是1.)访问速度,以及2.)拥有尽可能多的预先构建的方法.
提前谢谢你的帮助!!
哇!感谢大家对我的问题做出如此快速的回应.你的所有建议都对我帮助很大.我正在思考并考虑您的反馈中提供的所有选项.
请原谅我的任何模糊性; 让我来解答你的问题:
Q)英语?
A)文本文件实际上是用英文书写的.用第二语言出现一个单词很少见 - 但并非不可能.我将文本文件中非英语单词的百分比设为.0001%
Q)家庭作业?
A)我现在正在微笑地看着我的问题的措辞.是的,它确实类似于学校作业.但不,这不是功课.
Q)重复?
A)是的.可能每五个左右的单词,考虑连词,文章等.
问)访问?
A)随机和顺序.当然,一种方法可以随机定位一个单词.同样可能一种方法想要在word_1和word_120000之间顺序查找匹配的单词.这导致了最后一个问题......
Q)迭代整个列表?
A)是的.
此外,我计划发展这个程序,以执行许多其他方法.我为我的模糊性再次道歉.(细节确实让世界变得与众不同,不是吗?)
干杯!
我会将它们存储在一个大型ArrayList中,并担心(可能不必要的)优化.
由于本身就是懒惰,我认为优化并不是一个好主意,除非有明确的需求.否则,你只是浪费精力,可以更好地在其他地方度过.
事实上,如果你可以设置字数的上限而你不需要任何奇特的List操作,我会选择一个普通(本机)字符串对象数组,其中一个整数保存实际数字.这可能比基于类的方法更快.
这为您提供了访问各个元素的最快速度,同时仍然保留了执行所有精彩字符串操作的能力.
注意我没有针对ArrayLists对本机数组进行基准测试.它们可能和本机阵列一样快,所以你应该自己检查一下,如果你对我的能力的盲目信心比我少:-).
如果它们确实变得同样快(甚至接近),那么增加的好处(可扩展性,对于一个)可能足以证明它们的使用是合理的.