Sort TreeMap

3 respostas
java
X

Galera eu gostaria de saber como ordenar (crescente e !crescente) uma

TreeMap <Integer,Objeto>

no caso o objeto vai ser uma classe que vai ter 2 atributos: nome String: , valor double . Eu gostaria de ordenar esse TreeMap pelo atributo valor da classe objeto.

3 Respostas

G

com um TreeMap você não pode, não estou dizendo que é impossivel mas isso desafia a especificação do SortedMap
http://docs.oracle.com/javase/6/docs/api/java/util/SortedMap.html

The map is ordered according to the natural ordering of its keys, or by a Comparator typically provided at sorted map creation time.

S

TreeMap ordena suas entradas pela ordenação natural das chaves.
No seu caso essas chaves são do tipo Integer.
Você até pode fornecer um Comparator para o TreeMap, mas esse Comparator só vai servir para comparar as chaves.

Se essas chaves correspondem à índices, então recomendo utilizar List ao invés de TreeMap.

Com List você pode definir os comparadores abaixo:

static final Comparator<Objeto> ASCENDENTE = new Comparator<Objeto>() {

	@Override
	public int compare(Objeto a, Objeto b) {
		return (int) (a.getValor() - b.getValor());
	}
};

static final Comparator<Objeto> DESCENDENTE = new Comparator<Objeto>() {

	@Override
	public int compare(Objeto a, Objeto b) {
		return (int) (b.getValor() - a.getValor());
	}
};

E ordenar assim:

// ordenação ascendente
Collections.sort(objetos, ASCENDENTE);

ou assim:

// ordenação decendente
Collections.sort(objetos, DESCENDENTE);
X

Muito Obrigado a todos que ajudaram, então eu precisaria usar o TreeMap mesmo porque o professor queria que tudo tivesse log(N) e com lista não daria certo. Pesquisei para caralho e todas as funçoes que achei faziam praticamente a mesma coisa , transformava em Uma Collections da vida e ordenadava.

Criado 11 de dezembro de 2016
Ultima resposta 14 de dez. de 2016
Respostas 3
Participantes 3