Estoy implementando una cola de prioridad mediante un montículo y me he encontrado con un problema al que no dejo de darle vueltas. En realidad es una duda más que un problema.
Vereis, mi montículo esta implementado con un ArrayList y yo quiero que sea genérico, así que pongamos ArrayList<E>. Como ya sabeis para hacer un montículo la gracia es que los elementos se puedan comparar entre si para ordenar la estructura. El problema que me surge es que yo en principio no se que objetos va a contener mi cola de prioridad, asi que he definido dos constructores:
Código PHP:
public class Monticulo<E> extends AbstractQueue<E> {
private ArrayList<E> monticulo;
private Comparator<E> comparator;
//Contructor 1, sin comparator
public Monticulo(){
monticulo = new ArrayList<E>();
comparator = null;
}
//Constructor 2, con comparador
public Monticulo(Comparator<E> c){
monticulo = new ArrayList<E>();
comparator = c;
}
}
1 - He usado el contructor con comparador, uso ese comparador para comparar.
2 - El comparador es nulo, uso el método compareTo() de la interfaz Comparable, se supone que ese método lanza una ClassCastException si los objetos no se pueden comparar.
Código PHP:
private boolean esMenorQue(int i, int j) {
if (comparator != null) {
return comparator.compare(monticulo.get(i), monticulo.get(j)) == -1;
} else {
return monticulo.get(i).compareTo(monticulo.get(j)) < 0;
}
}
Bueno pues eso es, si necesitais más información, código o lo que sea para poder orientarme un poco decidmelo y os lo facilito.
Un saludo y gracias por vuestro tiempo.