Ordenar HashMap

7 respostas
M

Há algum método que ordene um HashMap em ordem alfabética, ou algum que facilite a minha vida?

hash.put(rs.getString(1), rs.getInt(2));

Quero ordenar as Strings!

7 Respostas

H

Tente assim:

Set set = hash.keySet();
String [] strings = (String []) set.toArray(new String[0]);

// fiat lux!

Arrays.sort(strings);

Obs.: não testei o código :slight_smile:

R

HashMap não é ordenado?

use TreeMap então

M

Bem…na real o buraco é mais em baixo!
Eu tenho um ArrayList de Strings e precisava ordenar um HashMap de acordo com essa sequencia de Strings:

array.add("Matheus");
array.add("Ana");
array.add("Jorge");

hash.put("Ana",18);
hash.put("Matheus,19);
hash.put("Jorge, 15);

Preciso ordenar esse HashMap agora…algém tem uma idéia simples de implementação?

H

Olá mdtorbis,

Talvez você desconheça como funciona um hash map (vá lá, eu também não sei muita coisa, hehehe).

Sem muito rigor, ele é uma estrutura de dados que armazena pares chave-valor tentando alcançar o tempo ideal de busca O(1) dos arrays. Para isso, ele usa o método hashcode do objeto para gerar uma chave numérica para cada elemento armazenado e que idealmente seria um índice de um array interno do mapa. Mas gerar um valor hash de um objeto traz a possibilidade de colisão (dois objetos gerando o mesmo hash), por isso, na prática, os hash maps têm uma estrutura de “baldes” e lógica de solução de colisões, degradando o santo graal O(1).

Talvez seja possível ordenar as chaves sobrescrevendo hashcode cuidadosamente. Caso isso seja feito, lembre-se que o método equals deve refletir essas mudanças.

M

Não terão valores repetidos com certeza =) isso que eu fiz foi só um exemplo…e sei como funcionam as estruturas qe estou usando…só não sei como fazer esta ordenação que citei =/

Mas obrigado pela ajuda

J

cara
tenta usar o metodo KeySet() para retornar um Set
depois use o metodo toArray() de set para pegar o array
depois tente ordenar pelo metodo Sort da classe Arrays… e passe o parametro o array que vc objteve pelo map e pelo set

se precisar use a classe comparator
sera que nao da assim ?

[]'s

A

Tenta o método TreeMap. Veja um exemplo no código abaixo :

package br.com.brasil.alanjavanet;

import java.util.*;

public class PrecosCursos {

public static void main(String[] args) {
	
	HashMap<String,Integer> preCurso=new HashMap<String,Integer>();
	
	preCurso.put("JSE", 190);
	preCurso.put("JEE", 380);
	preCurso.put("JME", 280);
	preCurso.put("EJB", 240);
	preCurso.put("JSTL", 90);
	preCurso.put("JSF", 170);
	preCurso.put("JSP", 120);
	
	Iterator j=preCurso.keySet().iterator();
	while(j.hasNext()){
		String curso=(String)j.next();
		int preco=(int)preCurso.get(curso);
		System.out.println(curso + ":" + preco);
					
	}
	
	System.out.println("-------------------------");
	
	TreeMap treePreCurso=new TreeMap(preCurso);
	Iterator k=treePreCurso.keySet().iterator();
	while (k.hasNext()){
		String curso=(String)k.next();
		int preco=(int)preCurso.get(curso);
		System.out.println(curso + ":" + preco);
		
	}
	
}

}

Criado 28 de março de 2005
Ultima resposta 14 de jul. de 2009
Respostas 7
Participantes 5