[RESOLVIDO] Escolha de estrutura de dados

13 respostas
Ticianne

Bom dia caros colegas! :smiley:

Por favor, me ajudem aqui a escolher qual a melhor estrutura de dados Java para resolver o seguinte problema:

Obtenho uma lista de conceitos (Strings) e cada um desses conceitos possui um conceito equivalente associado.
Preciso manter uma lista desses conceitos e seu respectivo equivalente.

A principio, implementei utilizando Hashmap, onde o conceito era a chave e o equivalente era o valor.
Porém, na recuperação das informações encontrei um problema e descobri que nesse caso não era bom utilizar hashmap.

Agora estou implementando com ArrayList. Mas como representar que um elemento do array tem outro associado, de uma forma que não seja extremamente complicada? :?

Obrigada pela ajuda!!! :slight_smile:

13 Respostas

Ticianne

Nenhuma ideia?

doug

Olá

Não sei intendi seu problema, mas acho se você fizer um arraylist de um objeto seu acho que você trabalharia melhor.
Por exemplo esse objeto tem atributos: Conceito (objeto ou String), esse array ou arraylist associado.

Tente utilizar o generics List<Objeto> aa = new ArrayList<Objeto>() e assim vai...

Espero ter ajudada
Flwss

Ticianne

Na verdade não… Mas obrigada. :slight_smile:

rolemberg

creio que o melhor seria usar mesmo um hashMap, sendo o conceito chave…Qual foi o problema que vc encontrou com hashMap???

Ticianne

Precisava que ele recuperasse por valor, mas o hashmap recupera por referencia…

M

Na verdade ele recupera pelo valor. O que pode estar acontecendo é vc não ter implementado equals() e hashCode() no tal objeto armazenado, neste caso ele usa a busca por referência.

Ticianne

Implementei o equals e o hashCode, mas ele nao roda o que eu implementei e sim o da propria Classe.

M

Cola sua classe aqui pra gente ver como vc implemetou.

Ticianne
import java.util.HashMap;

public class Relacionamento {
	
	private String nome;
	private Axioma range;
		
	public Relacionamento(String nome, Axioma range) {
		this.nome = nome;
		this.range = range;
	}
	
	public String getNome() {
		return nome;
	}
	
	public Axioma getRange() {
		return range;
	}
	
	public boolean equals(Relacionamento r){
		return(nome.equals(r.nome)&& range.getAxioma().equals(r.getRange().getAxioma()));
	}
	
	@Override
	public int hashCode(){
		return nome.hashCode();
	}
	}
rolemberg

ele recupera pelo valor, se vc setar a Referencia como valor esse será o valor…
mostra como vc esta setando o valor…

M
Ticianne:
import java.util.HashMap;

public class Relacionamento {
	
	private String nome;
	private Axioma range;
		
	public Relacionamento(String nome, Axioma range) {
		this.nome = nome;
		this.range = range;
	}
	
	public String getNome() {
		return nome;
	}
	
	public Axioma getRange() {
		return range;
	}
	
	public boolean equals(Relacionamento r){
		return(nome.equals(r.nome)&& range.getAxioma().equals(r.getRange().getAxioma()));
	}
	
	@Override
	public int hashCode(){
		return nome.hashCode();
	}
	}

Equals recebe um Object como parametro, e não um Relacionamento. Além disso é preciso ficar atento a outras regrinhas como usar o mesmo conjunto de atributos para calcular ambos equals e hashCode, relacionamento.equals(null) deve retorna false e não um NullPointer, etc...

Ticianne

Relacionamento é um Object… isso faz parte da logica da minha aplicação, tinha que ser assim, senão não funcionava.

Mas resolvi usar ArrayList.

Obrigada por quem respondeu. :wink:

M

Ticianne:
Relacionamento é um Object… isso faz parte da logica da minha aplicação, tinha que ser assim, senão não funcionava.

Mas resolvi usar ArrayList.

Bom, independente do que sua aplicação faz, implementar equals corretamente é uma das lógicas do Java que é preciso entender senão cedo ou tarde vc vai se deparar com bugs “inexplicaveis” na sua aplicacao. Se os objetos armazenados num ArraList não implementam equals então arrayList.equals(obj) não vai funcionar, assim como arrayList.contains(obj), arrayList.indexOf(obj), etc… :wink:

Criado 1 de dezembro de 2009
Ultima resposta 2 de dez. de 2009
Respostas 13
Participantes 4