• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kAIOSHIN

Remoção em TreeMap

6 mensagens neste tópico

Boas.

A minha pergunta é simples:

É possível remover um elemento de um TreeMap sem usar a sua chave? Ou seja, usando um dos campos do Objecto indexado pela chave.

Obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que podes se utilizares o método values() para obter uma visão dos Values, podes depois pesquisar pelo objecto em questão e utilizar o método remove() para o remover, mas não tenho a certeza se funciona.

Returns a Collection view of the values contained in this map. The collection is backed by the map, so changes to the map are reflected in the collection, and vice-versa. If the map is modified while an iteration over the collection is in progress (except through the iterator's own remove operation), the results of the iteration are undefined. The collection supports element removal, which removes the corresponding mapping from the map, via the Iterator.remove, Collection.remove, removeAll, retainAll and clear operations. It does not support the add or addAll operations. 

Também podes criares um novo TreeMap e ires copiando do antigo os pares <Chave,Valor> para os quais o campo Valor seja diferente daquele que queres eliminar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, pelo que sei, o método remove, funciona da forma remove(Object k); ou seja, remove o objecto "apontado" por aquela chave.

Eu queria fazer um método que removesse não pelo nome mas por um campo do objecto, algo tipo:

public void delete(String aRemover)
for(Objecto obj : arvore.values())
    if(obj.getNome() == aRemover)
       .................

Não tou a ver como remover...  :dontgetit:

Thanks.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes remover como diz naquele quote que eu fiz, através de um iterator:

- Classe Objecto:

import java.util.*;

public class Objecto {
private String nome;

public Objecto() { this.nome=""; }
public Objecto(String n) { this.nome=n; }
public Objecto(Objecto o) { this.nome=o.getNome(); }

public String getNome() { return this.nome; }
public void setNome(String n) { this.nome=n; }

public String toString() {
	StringBuilder s = new StringBuilder();
	s.append("Objecto -> Nome: ");
	s.append(this.nome);
	return s.toString();
}

public Objecto clone() { return new Objecto(this); }
}

- Classe de Teste onde crio o TreeMap:

import java.util.*;

public class Teste {
public static void main(String[] args) {
	TreeMap<Integer,Objecto> tm = new TreeMap<Integer,Objecto>();
	tm.put(1,new Objecto("baderous"));
	tm.put(2,new Objecto("p@p"));
	tm.put(3,new Objecto("lixo"));
	Iterator<Objecto> it = tm.values().iterator();
	boolean finished = false;
	while (it.hasNext() && !finished)
		if (it.next().getNome().equals("p@p")) {
			it.remove();
			finished=true;
		}
	for (Objecto obj : tm.values())
		System.out.println(obj);
}
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ahh pois... O "for each" dá para "quase" tudo... Menos neste caso. :thumbsup:

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O for each tb dá nesse caso, vais é eventualmente percorrer mais a estrutura do que com o iterator.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora