programación i - Universidad ORT Uruguay
programación i - Universidad ORT Uruguay
programación i - Universidad ORT Uruguay
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
112 Programación I<br />
12.1.8.2 Otra versión de búsqueda (indexOf)<br />
En vez de devolver true o false, que devuelva el objeto que estoy buscando.<br />
// VERSION 3: usa indexOf<br />
// Otra posible implementacion de buscar un Gasto<br />
// a partir del monto, utilizando metodos de la coleccion<br />
public Gasto buscarGastoDeMonto(int unMonto) {<br />
Gasto unG;<br />
// creo un objeto Gasto, similar al que busco<br />
// (similar implica que el método equals dara true)<br />
unG = new Gasto();<br />
unG.setMonto(unMonto);<br />
int aux;<br />
aux = (this.devolverTodosGastos().indexOf(unG));<br />
Gasto retorno = null;<br />
if (aux != -1) {<br />
retorno= (this.getListaGastos().get(aux));<br />
}<br />
return retorno;<br />
}<br />
El método indexOf devuelve la posición en la cual hay un objeto similar o el valor -1 si no lo<br />
hay. Aquí luego se accede a esa posición y se obtiene el objeto real.<br />
12.1.9 Ordenación (sort)<br />
Quiero agregar un método que muestre los gastos ordenados por monto. Veremos diferentes<br />
alternativas.<br />
12.1.9.1 Implementación a mano<br />
Una alternativa sería hacer mi propio método de ordenación, por ejemplo utilizando algoritmo<br />
de selección similar al utilizado al presentar los arrays. Este algoritmo recorre la lista buscando<br />
el mayor, cuando lo ubica lo coloca al final y repite esta operación, pero sin tener en cuenta el<br />
último. Repite la búsqueda y reubicación considerando la lista sin esos últimos elementos.<br />
Existen otros posibles métodos para ordenar que se verán en cursos posteriores (por ej. sort -<br />
ordenar- por enumeración, intercambio, inserción, quicksort, mergesort). El estudio de la<br />
eficiencia de estos algoritmos es un tema de cursos más avanzados.<br />
12.1.9.2 Reutilizar<br />
Veamos primero cómo debería ser este método. Pensemos si quisiera ordenar varios libros.<br />
¿Qué debo indicarle a alguien para que pueda ordenarlos? Si conoce algún algoritmo de<br />
ordenación como los nombrados arriba, en realidad lo único que necesita saber es: si dados dos<br />
libros, el primero es menor que el segundo o no. Debe tener un método que indique si un libro<br />
es menor que otro en algún sentido (por ej. cantidad páginas, edición, etc.).<br />
Existe en la clase Collections un método llamado sort, que según indica utiliza el orden natural<br />
de los elementos. ¿Qué es el orden natural? Es el orden definido en la propia clase. El método<br />
por defecto se llama compareTo. ¿Cómo sé que se llama así? Aparece aquí el concepto de<br />
interface.