【发布时间】:2011-02-11 17:38:18
【问题描述】:
我目前正在编写一个程序,该程序需要比较可变大小的 ArrayList 中的每个文件。现在,我这样做的方式是通过嵌套代码循环:
if(tempList.size()>1){
for(int i=0;i<=tempList.size()-1;i++)
//Nested loops. I should feel dirty?
for(int j=i+1;j<=tempList.size()-1;j++){
//*Gets sorted.
System.out.println(checkBytes(tempList.get(i), tempList.get(j)));
}
}
我已经阅读了一些关于嵌套循环必要性的不同意见,我想知道是否有人有更有效的选择。
一目了然,无论哪种方式,每次比较都需要进行,因此性能应该相当稳定,但我有理由相信有一种更清洁的方法可以做到这一点。有什么指点吗?
EDIT:: 为清楚起见,这只是功能的一部分。文件已根据长度进行比较并放入存储桶中 - 在遍历集合的映射并找到长度大于 1 的存储桶后,它会运行它。所以 - 这些都是相同大小的文件。在获取字节之前,我也会进行校验和比较,但现在我只是在尝试清理循环。
另外,天牛这个网站反应很快。谢谢各位。
EDIT2:: 抱歉,为了进一步澄清:我认为文件处理部分我已经掌握了 - 首先,我按长度比较和排序,然后按校验和,然后按字节 - 我遇到的问题是假设它们都需要比较,如何正确处理需要有效比较 ArrayList 中的所有文件。如果嵌套循环就足够了,那很酷,我只是想检查一下这是否是一种合适的方法,符合约定。
【问题讨论】:
-
我会保持这种方式。我没有看到进行 n(n-1)/2 比较的更简洁的方法。
-
看起来你可能每次比较都做两次,因为 checkBytes(a,b) 与 checkBytes(b,a) 相同。
-
如果你真的需要嵌套循环,使用它们真的没有什么问题。比较不同的数组列表对当然应该是其中一种情况。如果不进一步了解 checkBytes 函数,您的代码就无法真正得到改进。
-
@jvilalta:不,因为他知道内循环的下界。
-
@KGVT - @Jack 和 @Donal Fellows 的答案已经解决了您问题的“EDIT2”部分。你不了解他们什么?
标签: java loops nested nested-loops