indexOf() do ArrayList

Olá pessoal! Há bastante tempo acesso o site pra tirar dúvidas, mas finalmente criei uma conta e estou participando aqui :slight_smile:
Primeiramente, parabéns! Vocês manjam DEMAIS !! saushuashu

Bem, minha dúvida é com relação à utilização do indexOf() do ArrayList para objetos criados por mim. Vi muita coisa relacionada a Strings, mas minha situação é um pouco diferente.
Eu tenho uma classe Vertex como a seguir:

public class Vertex {
	private String name;
	
	Vertex(String name){
		this.name = name;
	}
}

Em seguida, em uma classe Graph, eu crio uma lista de vértices e preciso também de um método que retorne o índice de um vértice qualquer. A seguir:

public class Graph {
	
	private List<Vertex> vertices;
	
	Graph(){
		this.vertices = new ArrayList<Vertex>();
	}

	public void addVertex(Vertex v){
		if(!vertices.contains(v))
			this.vertices.add(v);
	}
	
	public int getVertexIndex(String name){
		return (vertices.indexOf(new Vertex(name)));
	}

Eu adiciono, por meio de outra classe, diversos vértices. Porém, quando chamo o método getVertexIndex() para retornar o índice do vértice na ArrayList, ele retorna -1 (vértice não encontrado). Aparentemente o método indexOf() da ArrayList não tá dando certo quando eu mando um objeto recém-criado.

Alguém aí sabe como resolver isso?
Desde já, muuuuuito obrigado galera! :smiley:

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

Retirado do javadocs do método indexOf:

Ou seja, o segredo aqui é você implementar o método equals da sua classe Vertex.

O == só funciona se forem a mesma referência. Para um objeto novo não serve.

Sobrescreva o equals (aproveite e sobrescreva o hashcode também) e vai funcionar.

AbelBueno, muito obrigado, mesmo! Realmente, ao sobrescrever o método equals() tudo funcionou! :smiley:

Pra quem interessar, aqui está o método que eu usei para sobrescrever o equals:

public boolean equals (Object obj){
		Vertex v2 = (Vertex) obj;

		if (this.name.equals(v2.getName()))
			return true;
		else
			return false;
		
}

Para não ter surpresas desegradáveis, sobrescreva hashcode também!