双循环读取文本文件

时间:2011-10-25 15:22:47

标签: java

是否可以使用double while / for循环读取文本文件?

我想做这样的事情:

for( String row1 = 0; row1 < file.length; row1++ ) {

   for( String row2 = row1 + 1; row2 < file.length; row2++ ){

       if( file[row1] == file[row2] ){
            // other code
       }

   }

}

我需要一个双循环,因为我必须在2.500.000行的文件中找到一个重复的行。 我不能使用Set来保存行,因为堆大小不足,如果我尝试增加它,我会收到此错误:“VM初始化期间出错 无法为对象堆保留足够的空间 无法创建Java虚拟机..“(我有一个Windows 7 64位和8 GB Ram)

提前致谢

3 个答案:

答案 0 :(得分:6)

对原始文件进行排序(您可以将其拆分并使用合并排序)。然后迭代地找到重复(如果prev == cur,你发现了一个副本)。

答案 1 :(得分:1)

根据您的问题及其后面的评论,您的目标是在大型文件中查找重复项。最坏的情况是O(N ^ 2) - 将每个对象与每个其他对象进行比较。更好的解决方案是先对它们进行排序。

因为文件太大而无法分配足够的内存来在内存中对其进行排序,所以需要使用不同的方法。 How could the UNIX sort command sort a very large file?提供了一些实施细节。一般问题是"external sorting"

维基百科页面中的伪代码应该易于遵循和实施。如果你真的很勇敢,你可以使用Unix排序命令和Knuth书的相应页面来处理算法细节。

...最后,我还没有真正审核或测试过一些Googled code

答案 2 :(得分:0)

你可以做到这一点。但性能是O(n²),这不太好。另外,请注意使用==。这将检查两个实例是否是同一个对象,它与使用equals不同。也许你可以为每一行计算一个哈希值并用它来嗅出可能的冲突。