Valores Repetidos no HashSet

4 respostas
Alkamavo

Boas pessoal preciso de inserir valores num hashSet mas infelizmente ele ma aceita valores repetidos..

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		ArrayList<Arcos> arcos = new ArrayList<Arcos>();

	
		
		String[] data = new String[5];

		int n_cidades = in.nextInt();

		String cidade_partida = in.next();

		String cidade_chegada = in.next();

		int hora_chegada = in.nextInt();

		int numero_voos = in.nextInt();

		in.nextLine();

		
		HashSet<Vertice> one = new HashSet<Vertice>();
		
		Vertice v_inicial = new Vertice(cidade_partida, 0);
		Vertice v_final = new Vertice(cidade_chegada, hora_chegada + 30);

		
		vertices.add(v_inicial);
		vertices.add(v_inicial);

		for (int x = 0; x < numero_voos; x++) {

			data = in.nextLine().split(" ");
			Vertice v1 = new Vertice(data[0], Integer.parseInt(data[3]));
if(!one.Contains(v1)){
	                one.add(v1);
}
	


				
			}
		}

		

		System.out.println(vertices.toString());

	}

	public static void changeHour(Vertice aux) {

		if (String.valueOf(aux.gethora()).substring(2, 4).equals("60")) {
			// aux.setHour((x+1));
			aux.sethora(Integer.parseInt((String
					.valueOf((Integer.parseInt(String.valueOf(aux.gethora())
							.substring(0, 2)) + 1)) + "00")));
		}
	}

o vertice é um objecto composto por uma string e um inteiro.

Vertice v  = new Vertice(string , int);

4 Respostas

furutani

Olá

O HashSet foi feito justamente para não aceitar valores repetidos.
Use um List ou um Array para isso.

Alkamavo

furutani:
Olá

O HashSet foi feito justamente para não aceitar valores repetidos.
Use um List ou um Array para isso.

ele esta justamente a aceitar valores repetidos…
eu sei disso , li a api…e ta me montado…

Alkamavo

resolvido…

o segredo estava no equals, o hashSet para ver se o objecto esta repetido usa o equals(Object xpto) tempos de redefinir este metodo na classe que criamos para o nosso objecto mas com o parametro Objec, na comparação fazemos uma cast para o tipo do nosso objecto e kuando ele usar (HashSet) usa como deve ser…

aqui esta:

public boolean equals(Object o) { if (this.cidade.equals(((Vertice) o).getcidade()) && this.hora == ((Vertice) o).gethora()) { return true; } else return false; }

sergiotaborda

Alkamavo:
resolvido…

o segredo estava no equals, o hashSet para ver se o objecto esta repetido usa o equals(Object xpto)

Não apenas do equals, mas no hashCode tb. (hashSet -> hashCode)

sobre-escreva hashCode tb.

Criado 28 de junho de 2008
Ultima resposta 28 de jun. de 2008
Respostas 4
Participantes 3