Actualmente estoy escribiendo un programa que necesita comparar cada archivo en un ArrayList de tamaño variable. En este momento, la forma en que estoy haciendo esto es a través de un código de bucle anidado:Alternativa al lazo anidado para comparación
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)));
}
}
He leído algunas opiniones divergentes sobre la necesidad de bucles anidados, y me preguntaba si alguien tenía una alternativa más eficiente .
A primera vista, cada comparación va a tener que hacer, de cualquier manera, por lo que el rendimiento debe ser bastante estable, pero estoy convencido de moderadamente hay una forma más limpia de hacer esto. ¿Alguna sugerencia?
EDIT :: Esta es solo una parte de la función, para mayor claridad. Los archivos han sido comparados y puestos en cubos en función de la longitud: después de recorrer el mapa del conjunto y encontrar un depósito que es mayor que uno, lo ejecuta. Entonces, estos son todos archivos del mismo tamaño. Haré una comparación de suma de comprobación antes de llegar a los bytes también, pero ahora mismo estoy tratando de limpiar el ciclo.
Además, holy cow este sitio responde rápido. Gracias chicos.
EDIT2 :: Lo siento, para mayor aclaración: Creo que la parte de manejo de archivos que tengo una buena comprensión, primero, la comparo y ordeno por longitud, luego por suma de comprobación, luego por bytes, el problema que tengo es cómo lidiar adecuadamente con la necesidad de comparar todos los archivos en el ArrayList de manera eficiente, suponiendo que todos deben ser comparados. Si un ciclo anidado es suficiente para esto, es genial, solo quería comprobar que este era un método adecuado, según la convención.
Me gustaría mantener de esta manera. No veo una manera más limpia de hacer las n (n-1)/2 comparaciones. –
Parece que podría estar haciendo cada comparación dos veces, ya que checkBytes (a, b) es lo mismo que checkBytes (b, a). – jvilalta
No hay nada de malo con el uso de bucles anidados si realmente los necesita. Comparar pares distintos de un arraylist debería ser uno de esos casos. Su código realmente no se puede mejorar sin quizás un mayor conocimiento de la función checkBytes. –