Solução 1, nessa eu implemento o método equals e hashcode de Aresta, e crio um construtor em Aresta só para setar os campos “key” dela.
import java.util.LinkedList;
public class Teste
{
static class Vertice
{
}
static class Aresta
{
private Vertice origem;
private Vertice destino;
private int peso;
public Aresta (Vertice origem, Vertice destino, int peso)
{
this.origem = origem;
this.destino = destino;
this.peso = peso;
}
public Aresta (Vertice origem, Vertice destino)
{
this.origem = origem;
this.destino = destino;
}
public int getPeso()
{
return peso;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode()
{
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((destino == null) ? 0 : destino.hashCode());
result = PRIME * result + ((origem == null) ? 0 : origem.hashCode());
return result;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj)
{
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
final Aresta other = (Aresta) obj;
if (destino == null)
{
if (other.destino != null) return false;
}
else if (!destino.equals(other.destino)) return false;
if (origem == null)
{
if (other.origem != null) return false;
}
else if (!origem.equals(other.origem)) return false;
return true;
}
}
public static void main(String[] args)
{
Vertice v1 = new Vertice();
Vertice v2 = new Vertice();
Vertice v3 = new Vertice();
Vertice v4 = new Vertice();
Vertice v5 = new Vertice();
LinkedList<Aresta> list = new LinkedList<Aresta>();
list.add(new Aresta(v1, v2, 3));
list.add(new Aresta(v2, v3, 6));
list.add(new Aresta(v3, v4, 4));
list.add(new Aresta(v4, v5, 8));
int ix = list.indexOf(new Aresta(v4, v5));
if (ix >= 0)
{
Aresta rem = list.remove(ix);
System.out.println("Aresta com peso " + rem.getPeso() + " removida");
}
else
System.out.println("Aresta não encontrada.");
}
}
Solução 2, nessa eu não quero implementar equals e hashcode ai faço o método de busca, provavelmente mais lento
import java.util.LinkedList;
public class Teste
{
static class Vertice
{
}
static class Aresta
{
private Vertice origem;
private Vertice destino;
private int peso;
public Aresta (Vertice origem, Vertice destino, int peso)
{
this.origem = origem;
this.destino = destino;
this.peso = peso;
}
public int getPeso()
{
return peso;
}
static Aresta indexOfAresta(List<Aresta> list, Vertice origem, Vertice dest)
{
for (Aresta aresta : list)
{
if ((aresta.destino.equals(dest)) && (aresta.origem.equals(origem))) return aresta;
}
return null;
}
}
public static void main(String[] args)
{
Vertice v1 = new Vertice();
Vertice v2 = new Vertice();
Vertice v3 = new Vertice();
Vertice v4 = new Vertice();
Vertice v5 = new Vertice();
LinkedList<Aresta> list = new LinkedList<Aresta>();
list.add(new Aresta(v1, v2, 3));
list.add(new Aresta(v2, v3, 6));
list.add(new Aresta(v3, v4, 4));
list.add(new Aresta(v4, v5, 8));
Aresta rem = Aresta.indexOfAresta(list, v2, v3);
if (rem != null)
{
list.remove(rem);
System.out.println("Aresta com peso " + rem.getPeso() + " removida");
}
else
System.out.println("Aresta não encontrada.");
}
}
Só existe essas formas de fazer?! não sei. São as melhores soluções?! não sei. Você usa uma delas?! não sei ehhehe
Da para criar uma solução usando Collections.binarySearch tb.
Ve ai… se gosta, ou espera que outra pessoa pode postar algo melhor.
Valeu