My Hashtable en Java bénéficierait d'une valeur ayant une structure de tuple. Quelle structure de données puis-je utiliser en Java pour faire cela?
Hashtable<Long, Tuple<Set<Long>,Set<Long>>> table = ...
My Hashtable en Java bénéficierait d'une valeur ayant une structure de tuple. Quelle structure de données puis-je utiliser en Java pour faire cela?
Hashtable<Long, Tuple<Set<Long>,Set<Long>>> table = ...
Je ne pense pas qu'il existe une classe de tuple à usage général en Java, mais une classe personnalisée peut être aussi simple que la suivante:
public class Tuple<X, Y> {
public final X x;
public final Y y;
public Tuple(X x, Y y) {
this.x = x;
this.y = y;
}
}
Bien sûr, il y a des implications importantes sur la façon de concevoir cette classe plus loin en ce qui concerne l'égalité, l'immuabilité, etc., surtout si vous prévoyez d'utiliser des instances comme clés pour le hachage.
javatuples est un projet dédié aux tuples en Java.
Unit<A> (1 element)
Pair<A,B> (2 elements)
Triplet<A,B,C> (3 elements)
Apache Commons a fourni quelques utilitaires Java communs, y compris une paire . Il implémente Map.Entry
, Comparable
et Serializable
.
En guise d'extension à @maerics, j'ai ajouté quelques méthodes utiles:
public class Tuple<X, Y> {
public final X x;
public final Y y;
public Tuple(X x, Y y) {
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "(" + x + "," + y + ")";
}
@Override
public boolean equals(Object other) {
if (other == null) {
return false;
}
if (other == this) {
return true;
}
if (!(other instanceof Tuple)){
return false;
}
Tuple<X,Y> other_ = (Tuple<X,Y>) other;
return other_.x == this.x && other_.y == this.y;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((x == null) ? 0 : x.hashCode());
result = prime * result + ((y == null) ? 0 : y.hashCode());
return result;
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.