HashSet

5 respostas
anderson.bonavides
import java.util.*;
public class WrappedString {
	private String s;
	public WrappedString(String s) {
		this.s = s;
	}
	public static void main(String[] args) {
		HashSet<Object> hs = new HashSet<Object>();
		WrappedString ws1 = new WrappedString("aaa");
		WrappedString ws2 = new WrappedString("aaa");
		WrappedString ws3 = new WrappedString("aaa");
		WrappedString ws4 = new WrappedString("aaa");
		hs.add(ws1);//1
		hs.add(ws2);//2
		hs.add(ws3);//3
		hs.add(ws4);//4
		System.out.println(hs.size()); //IMPRIME 4
		
		String s1 = new String("aaa");
		String s2 = new String("aaa");
		String s3 = new String("aaa");
		hs.add(s1);//5
		hs.add(s2);//não add
		hs.add(s3);//não add			
		System.out.println(hs.size());//IMPRIME 5
	}	
}
Alguêm poderia me ajudar com essa já que a inteface Set não permite duplicatas?

5 Respostas

T

Você não redefiniu os métodos “hashCode” e “equals” na sua classe WrappedString.

anderson.bonavides

thingol hashCode e equals não são só para interface Map?

E já que não está redefinido pq eles aceitam duplicatas da Classe mas não do objeto String?

T

hashCode + equals devem ser redefinidos quando você usa uma classe em:

  • Um HashSet ou LinkedHashSet;
  • Uma chave de um HashMap ou LinkedHashMap.

compareTo deve ser definido quando você usa uma class em:

  • Um TreeSet;
  • Uma chave de um TreeMap.

A história que você ouviu do “Map” está errada - note que a interface Map é implementada tanto por HashMap e LinkedHashMap (que exigem hashCode + equals) quanto por TreeMap (que exige compareTo ou um objeto Comparator).

Em caso de dúvida, sempre consulte a documentação.

T

A classe String redefiniu os métodos hashCode e equals, enquanto sua classe, que deriva diretamente de Object, herdou as implementações dos métodos hashCode e equals de Object, que checam apenas se 2 objetos são os mesmos na memória (não o conteúdo deles).

anderson.bonavides

thingol:
A classe String redefiniu os métodos hashCode e equals, enquanto sua classe, que deriva diretamente de Object, herdou as implementações dos métodos hashCode e equals de Object, que checam apenas se 2 objetos são os mesmos na memória (não o conteúdo deles).

thingol perfeita essa sua explicação. Tinha esquecido do detalhe que String implementa hashcode e equals. Vlw pela força.

Criado 17 de janeiro de 2008
Ultima resposta 17 de jan. de 2008
Respostas 5
Participantes 2