Effectivement.
Dans un premier temps, je sais pas si ta structure de données est imposée, mais, ça me semblerait plus propre pour représenter ton graphe comme étant une liste de couples de sommets.
public class Sommet{
int idSommet;
/* */
}
public class Arrete {
Sommet A;
Sommet B;
/* Constructeurs et accesseurs */
public boolean equals(Object o){
/* le truc habituel ici */
Arrete arr = (Arrete) o;
if((arr.getA().equals(this.getA()) && arr.getB().equals(this.getB()))||
(arr.getA().equals(this.getB()) && arr.getB().equals(this.getA()))){
// Permet de valider que l'arrete A->B soit égale à l'arrete B->A
return true;
}
}
}
public class Graph {
List<Sommet> mes_sommets;
List mes_arretes;
public boolean isConnexe(){
return mes_arretes.size()-1>=mes_sommets.size();
}
public boolean isATree(){
return mes_arretes.size()-1==mes_sommets.size();
}
}
Le fait de passer par une structure un peu plus élaborée te simplifiera, je pense, ton problème. Car en réimplémentant le 'equals', tu pourras ensuite utiliser le 'contains' sur ta liste.
Si tu souhaites garder ta structure de données... pour éviter les doublons, a mon avis, il faudrait passer par un tableau intermediaire. Et en passant par des identifiants pour tes sommets, qui sont des nombres premiers. Ton tableau intermédiaire stockerai le produit de tes deux identifiants de sommets, qui devrait être unique...
Ensuite, chaque fois que tu souhaite ajouter des valeurs à t, tu verifies que ton tableau intermediaire ne contienne pas le produit de tes deux identifiants de sommets... Ca me semble le truc le plus 'simple' à mettre en place, en conservant ta structure de données actuelle.