occurences d'un objet dans une collection

occurences d'un objet dans une collection - Java - Programmation

Marsh Posté le 22-05-2009 à 11:21:27    

Bonjour,
 
J'ai fait un bout de code qui analyse un fichier de log généré par log4j et qui contient entre autres, des exceptions.
Mon but est de récupérer les exceptions, de les parser et de les regrouper pour obtenir le nombre d'occurrences de chaque type d'exception.
Je parviens à les parser et à les transformer en objets exploitables. J'ai maintenant une collection d'objets qui représente ces exceptions.
 
Je souhaite compter le nombre d'occurrences de chacune de ces exceptions dans ma collection et je ne sais pas par quelle bout le prendre.
 
Je pense que le plus simple est d'utiliser une HashMap en redéfinissant les méthodes equals() et hashCode() sur mes objets qui représentent mes exceptions. Pour le equals(), tout va bien, je me suis fixé un critère d'égalité entre 2 exceptions. Pour le hashCode, je ne sais pas comment définir un hashcode en m'assurant que 2 exceptions que je considère égales auront le même hashCode.
 
Concrètement, mon critère d'égalité entre 2 exceptions se base sur 2 attributs String, disons s1 et s2, je veux que 2 exceptions e1 et e2 aient le même hashCode si et seulement si (e1.s1==e2.s1 && e1.s2==e2.s2). Je ne sais pas comment générer efficacement ce hashCode. Pouvez vous me guider?

Reply

Marsh Posté le 22-05-2009 à 11:21:27   

Reply

Marsh Posté le 22-05-2009 à 12:07:31    

j'ai trouvé ma réponse.
En fait, il suffit simplement de générer le hashcode directement à partir des String dont je me sers pour vérifer l'égalité entre mes exceptions.
 
Je pensais que le hashcode généré par des String était différent pour deux String générées de cette manière:
 
String s1=new String("lala" );
String s2=new String("lala" );
 
Apparemment, même généré de cette manière:
 
StringBuffer sb=new StringBuffer("machin" );
System.out.println(sb.toString().hashCode());
   
StringBuffer s= new StringBuffer("m" );
s.append("a" );
s.append("c" );
s.append("h" );
s.append("i" );
s.append("n" );
System.out.println(s.toString().hashCode());
 
on obtient encore les même hashCode(), meme si les 2 objets ne sont pas égaux au sens du '=='
 
J'ai donc généré mon hashCode de cette façon:
 
@Override
  public int hashCode() {
   StringBuffer sb= new StringBuffer();
   sb.append(s1);
   sb.append("#" );
   sb.append(s2);
   sb.append("#" );
   sb.append(jsp);
   return sb.toString().hashCode();
  }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed