361 votes

Utilisation de paires ou de 2-tuples en Java

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 = ...
 

364voto

maerics Points 47743

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.

184voto

Daniel Points 681

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)
 

120voto

rhgb Points 887

Apache Commons a fourni quelques utilitaires Java communs, y compris une paire . Il implémente Map.Entry , Comparable et Serializable .

74voto

at7000ft Points 144

Si vous recherchez un tuple Java à deux éléments, essayez AbstractMap.SimpleEntry.

41voto

Aram Kocharyan Points 8530

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.com

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.

Powered by:

X