Collection ou Map pra incluir em ordem

15 respostas
R

ae
qual colection/map eu uso pra incluir em ordem se ter que ficar manipulando a inclusão/exclusão/etc na mão?

15 Respostas

J

Ahnn?!?

como assim?! Incluir onde?! Que tipo de Ordem?!

Explica melhor ai kra…

não deu pra entender…

abraço!

V

Para inserir em ordem você deve usar TreeSet ou TreeMap. TreeSet deve ser usada quando você deseja simplesmente por e tirar toda hora. (no bom sentido!) Já TreeMap deve ser usada se você precisa mapear cada objeto do container a objetos chave.

TreeSet e TreeMap tentam inserir os objetos em sua “ordem natural”. A ordem natural das Strings, por exemplo, é a ordem lexicográfica. Mas o objeto que você for inserir não tenha uma “ordem natuaral” você deverá implementá-la. Você pode definir uma ordem que não seja a ordem natural passando uma classe que implementa a interface java.util.Comparator como parâmetro do construtor.

R
ublic class Contato {
	
	private String telefone ="",
					nome = "",
					endereco ="",
					email = "";
	private StringBuffer anotacoes = null;
	public Contato(String tel, String nom)
	{	this.telefone = tel;
		this.nome = nom;
		}
	public Contato(String tel, String nom, String ema)
	{		this.telefone = tel;
			this.nome = nom;
			this.email = ema;
	}
	
	public Contato(String tel, String nom, String ema, String end)
	{		this.telefone = tel;
			this.nome = nom;
			this.email = ema;
			this.endereco = end;
	}
	
	public Contato(String tel, String nom, String ema, String end, StringBuffer anotac)
	{		this.telefone = tel;
			this.nome = nom;
			this.email = ema;
			this.endereco = end;
			this.anotacoes = anotac;
	}
	
	public String getTelefone()
	{	return this.telefone;
		}
	public String getNome()
	{	return this.nome;
		}
	public String getEmail()
	{	return this.email;
		}
	public String getEndereco()
	{	return this.endereco;
		}
	public StringBuffer getAnotacoes()
	{	return this.anotacoes;
		}
	
	public void setTelefone(String tel)
	{	this.telefone = tel;
		}
	
	public void setNome(String tel)
	{	this.nome = tel;
		}
	
	public void setEmail(String tel)
	{	this.email = tel;
		}
	
	public void setEndereco(String tel)
	{	this.telefone = tel;
		}
	
	public void setAnotacoes(StringBuffer anotac)
	{	this.anotacoes = anotac;
		}
	public void addAnotacao(String str)
	{	this.anotacoes.append(str);
		}
	public int compareTo(Contato cont )
	{
		return this.telefone.compareTo(cont.telefone);
		}
}

seguinte
quero criar uma agenda virtual
e esta é classe Contato
quero uma collection ou map que seja um "vetor" pra isso, pois to "com preguiça" de fazer os metodos para fazer deslocamento, pesquisa, inclusão em ordem, etc...

V

Pode usar TreeSet então, microfilo.

Não é difícil, você vai ver. Primeiro você vai ter que implementar um ContatoComparator para você definir em que ordem vai querer. Ordem de nomes? Ordem de Telefones? Ordem crescente? Ordem decrescente?

Aí você insere usando um simples add. Ele já vai colocar “no lugar certo”. Depois você pesquisa todos usando um iterator.

E esquece Vector! Es-que-ce Vector! Use Arraylist para os outros casos… :wink:

R

oq vc tem contra Vectors???

whatever… eu usei a classe TreeMap
usei o construtor vázio dela e na hora de incluir eu ponho

agenda.add(contato.getTelefone(), contato)

onde

agenda instanceof TreeMap

contato.telefone = chave primaria

V

:???: O Matheus já te respondeu isso. :roll:

“microfilo”:

usei o construtor vázio dela e na hora de incluir eu ponho
agenda.add(contato.getTelefone(), contato)

onde

agenda instanceof TreeMap
contato.telefone = chave primaria

Tá, mas desse jeito você não está definindo a forma como você quer que fique ordenado. Você tem que usar o construtor que recebe um objeto de uma classe que implementa a interface java.util.Comparator.

R

humn… mas o TreeMap não chama o metodo compareTo dos objetos?
pelo que eu vi num livro, desse jeito ele vai incluindo em ordem

V

:oops:

Hi… não tinha visto que você implementou um método compareTo em sua classe Contato. Te qualquer forma, já que você fez assim, deixe explícito que você está implementando Comparator. :wink:

Mas desse jeito não funcionou?

R

na verdade, eu ainda não implementei
estou usando a metodologia PDCA
plan, do, check and act…

uahuahuahau
zuera…

primeiro eu queria saber se alguem sabia de um map ou collection que resolvia meu problema e então eu vi no livo universidade java, que é bem fraquinho, a parte do java.util e ele fala da treemap

V

“microfilo”:
na verdade, eu ainda não implementei
estou usando a metodologia PDCA
plan, do, check and act…

Pois então trate de mudar para Test-driven development (TDD) com o JUnit, pois com software o buraco é mais embaixo. :cool:

R

bem, o professor de gestão de qualidade e processos pediu pra eu fazer um trabalho de PDCA, então eu vou fazer desse jeito…

embora o PDCA não é bem pra informatica, é mais uma coisa geral…

V

Esse povo da administração e da OSM louva, adora, reverencia o PDCA.

Na minha opinião PDCA, é melhor que nada. Mas está longe de ser melhor que tudo.

Mesmo se tratando de processos gerenciais, ficar preso a PDCA, 5S, e outras siglas é muito modismo. Um jeito novo de dizer como as mesmas velhas coisas são feitas. =P

Mas deixa seu espírito crítico guardadinho enquanto estiver fazendo sua tarefa. :slight_smile:

R

hhauhaua

esse vinci manja muito…
vc não usa icq?

V

Que manja muito nada, microfilo.

Vocês é que perguntam justamente o pouquinho que sei. :slight_smile:

Ué, já te adicionei há tanto tempo no meu ICQ…

Detalhe: TDD também é uma sigla! :lol:

R

problema do icq resolvido!

e bem na época que eu vou fazer uma trabalho sobre PDCA…

Criado 18 de agosto de 2004
Ultima resposta 21 de ago. de 2004
Respostas 15
Participantes 3