Problema na ordenação com List

Caro amigo.
Estou tendo um pequeno problema para ordenar alfabeticamente a minha classe Cidade.
O seguinte código foi implementado por mim:

public List<Cidade> getMunicipios(Long filiadoAssociadoId) {
FiliadoAssociado filiadoAssociado = (FiliadoAssociado) createCriteria(FiliadoAssociado.class).add(Restrictions.eq(“id”, filiadoAssociadoId)).uniqueResult();
List<Cidade> cidades = new ArrayList();

if (filiadoAssociado.getExtensoesDeBase() != null) {
cidades.addAll(filiadoAssociado.getExtensoesDeBase());
}
cidades.add(filiadoAssociado.getEndereco().getCidade());
Collections.sort(cidades);
return cidades;
}
O resultado sendo visto num select em HTML é justamente o incorreto, ou seja, não houve a ordenação correta.

Na classe Cidade.java esta implementado Comparable<Cidade> e também o método compareTo da seguinte forma:

public int compareTo(Cidade cidade) {
/*
if (this.nome.compareTo(cidade.nome) < 0) {
return -1;
} else if (this.nome.compareTo(cidade.nome) > 0) {
return 1;
} else {
return 0;
}
*/
return this.nome.compareTo(cidade.nome);
}

O que devo fazer para ter o resultado correto ?
Deveria utilizar o SortedSet + TreeSet ao invéz do List + ArrayList ?

Muito grato

Olá, uma pergunta… Terás elementos repetidos nessa Lista ? Se a resposta for NAO entao aconselharia tu usar a classe TreeSet, pois elá conforme insersão já vai ordenando pra ti. Se a resposta for não, teras que criar uma classe usando a Interface Comparable e Reescrever o método compare. :joia:

Só uma observação.

A interface Compareble o método é o compareTo.

[code] package java.lang;

public interface Comparable {
public int compareTo(T o);
}[/code]

O método compare se refere a interface Comparator.

public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); }

Ok
:brinde:

Obrigado pela OBS :joia: Faz tempo que implementei isso, e tinha esquecido os nomes certinhos. :lol:

Bom pessoal, fiz a implementação no método compareTo da seguinte forma:

	public int compareTo(Cidade cidade) {
		return this.nome.compareToIgnoreCase(cidade.nome);
	}

E modifiquei o meu GetMunicipios para:

	public SortedSet<Cidade> getMunicipios(Long filiadoAssociadoId) {
		FiliadoAssociado filiadoAssociado 	= (FiliadoAssociado) createCriteria(FiliadoAssociado.class).add(Restrictions.eq("id", filiadoAssociadoId)).uniqueResult();
		SortedSet<Cidade> cidades 			= new TreeSet();

		if (filiadoAssociado.getExtensoesDeBase() != null) {
			cidades.addAll(filiadoAssociado.getExtensoesDeBase());
		}
		cidades.add(filiadoAssociado.getEndereco().getCidade());
		[b]System.out.println(cidades);[/b]

		return cidades;
	}

Com o breakpoint fui depurar o resultado e percebi que a ordenação esta correta, vejam:

[Id: 94, Nome: ADAMANTINA , Id: 1, Nome: AREIAS , Id: 215, Nome: MARIAPOLIS ]

Mas ao ser apresentado no select HTML o seguinte resultado esta sendo apresentado:

AREIAS
ADAMANTINA
MARIAPOLIS

O que pode esta dando de errado, coisa bizarra.
Não tenho nada de excepcional no código HTML.

Pessoal já encontrei o problema…
Eram métodos duplicados (bobeira minha) desculpem!

Desde já agradeço todas as dicas e conselhos.