Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/06/2010, 02:25
Biribu
 
Fecha de Ingreso: mayo-2010
Mensajes: 17
Antigüedad: 14 años
Puntos: 0
Ordejar hashSet mediante una lista

Buenas.

Tengo un hashSet de objetos Cosa por ejemplo. (No puedo elegir otro tipo de almacen de datos)

Casa Cosa tiene una cadena que es su identificador y luego un hashSet para tener los que cuelgan de el.

Quiero ordenarlos por su clave, en orden alfabetico. Entonces lo que se me habia ocurrido es sacar todos los objectos del hashSet a una lista y ordenarlos, entonces borro el hashSet y los añado de nuevo ordenados. ¿Que os parece?

Me falta decir que el atributo sufijos (en plural) es un set<Nodo> declarado hashSet<Nodo>()
Código:
public void setSufijos(Nodo sufijo){
		int x = 0, tam;
		Iterator<Nodo> iterador;
		Nodo nodo, nodoAux;
		List<Nodo> lista = new ArrayList<Nodo>();
		
		if(sufijos.isEmpty()){ /*Si esta vacio el set de sufijos*/
			sufijos.add(sufijo);    	
    	}
		else{ /*Si no esta vacio*/
			iterador = sufijos.iterator();
			while(iterador.hasNext()){
				nodo = iterador.next();
				lista.add(nodo);
			}
			/*Compruebo que no sea el ultimo a añadir*/
			if(sufijo.compareTo(lista.get(lista.size() - 1)) < 0){
				lista.add(sufijo);
			}
			else{
				tam = lista.size();
				while(x < tam){
					if(sufijo.compareTo(lista.get(x)) < 0){
						nodoAux = lista.set(x, sufijo);
						sufijo = nodoAux;
					}
					x++;
				}
				lista.add(sufijo);
	
				/*Borramos el set*/
				this.deleteSufijosAll();
				/*Añadimos toda la lista ordenada*/
				tam = lista.size();
				x = 0;
				while(x < tam){
					sufijos.add(lista.get(x));
				}
			}
		}
    }
Y os pego tambien los metodos de borrar todos y comparar:
Código:
public boolean deleteSufijosAll(){
    	sufijos.clear();
    	return true;
    }
    public int compareTo(Nodo n){
    	return this.getClave().compareToIgnoreCase(n.getClave());
    }
Pero falla, porque si quito esto y sin mas pongo que lo añada no casca, pero al hacer esto si y no se porque...