我有一个简短的问题。我正在做一个学校项目,我需要解析一个非常大的文本文件。它用于数据库类,因此我需要从文件中获取唯一的 Actor 名称,因为 Actor 将是 mysql 数据库中的主键。我已经编写了解析器并且效果很好,但当时我忘了删除重复项。所以,我决定最简单的方法是创建一个 Actor 数组列表。 (使用 ArrayList ADT)然后使用 contain() 方法检查角色名称是否在数组列表中,然后再将其打印到新的文本文件。如果是,我什么都不做,如果不是,我将它添加到 arraylist 并打印到页面。现在程序运行非常慢。在arraylist之前,大概用了5分钟。旧的 Actor 文件是 180k,没有删除重复项。到目前为止,它已经运行了 30 分钟,速度为 12k。 (这次我预计总共有 100k-150k。)
我将数组列表的大小留空,因为我不知道文件中有多少 Actor ,但至少有 1-2 百万。我正在考虑只投入 500 万美元来计算它的规模,然后检查它是否得到了所有的资金。 (只需检查最后一个 arraylist 索引,如果为空,则它没有用完空间。)这会减少时间吗,因为 arraylist 不会不断加倍并重新复制所有内容?有没有比这更快的方法?我还担心我的计算机可能会在完成之前耗尽内存。任何建议都会很棒。
(我也曾尝试在文本文件上运行“unique”命令但没有成功。 Actor 姓名每行打印 1 个。(在一列中)我在想命令可能是错误的。你如何从一个文件中删除重复项windows 或 linux 命令提示符中的文本文件列?)谢谢你,很抱歉发了这么长的帖子。我明天有期中考试,开始感到压力很大。
最佳答案
使用 Set 而不是 List,这样您就不必检查集合是否包含该元素。 Set 不允许重复。
关于Java-解析大文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15873812/