Quelle classe fonctionnerait le mieux pour une liste de paires non ordonnée? Je vais prendre un tas de paires (float, short) et devra pouvoir effectuer des calculs simples (comme multiplier la paire pour obtenir un seul float, etc.). La liste ne prend qu'un argument, et HashMap n'autorisera pas les doublons (pour autant que je sache). Des pensées?
Vous pouvez utiliser la classe Entry<U,V>
utilisée par HashMap
mais vous serez bloqué par sa sémantique de getKey
et getValue
:
List<Entry<Float,Short>> pairList = //...
Ma préférence serait de créer votre propre classe Pair
simple:
public class Pair<L,R> {
private L l;
private R r;
public Pair(L l, R r){
this.l = l;
this.r = r;
}
public L getL(){ return l; }
public R getR(){ return r; }
public void setL(L l){ this.l = l; }
public void setR(R r){ this.r = r; }
}
Ensuite, bien sûr, créez une List
en utilisant cette nouvelle classe, par exemple:
List<Pair<Float,Short>> pairList = new ArrayList<Pair<Float,Short>>();
Vous pouvez également toujours créer une List
s de List
s, mais il devient difficile d'appliquer le dimensionnement (vous n'avez que des paires) et vous seriez obligé, comme pour les tableaux, d'avoir un typage cohérent.
Utilisez une liste d'instances de classe personnalisées. La classe personnalisée est une sorte de paire, de coordonnées ou autre. Alors juste
List<Coordinate> = new YourFavoriteListImplHere<Coordinate>()
Cette approche présente l’avantage de satisfaire à cette exigence "effectuer des calculs simples (comme multiplier la paire pour renvoyer un seul flottant, etc.)", car votre classe personnalisée peut avoir des méthodes pour tout ce que vous devez faire ...
je corrige juste quelques petites erreurs dans le code de Mark Elliot:
public class Pair<L,R> {
private L l;
private R r;
public Pair(L l, R r){
this.l = l;
this.r = r;
}
public L getL(){ return l; }
public R getR(){ return r; }
public void setL(L l){ this.l = l; }
public void setR(R r){ this.r = r; }
}
On dirait que vous devez créer votre propre classe de couples (voir discussion ici ). Ensuite, faites une liste de la classe de paires que vous avez créée
Si vous voulez des multiplicités, vous pouvez le mettre sur une carte qui mappe la paire à monter ..____. De cette façon, il n'y aura qu'une paire de valeurs données, mais cela peut représenter plusieurs occurrences.
Ensuite, si vous avez beaucoup de valeurs de répétition et que vous souhaitez effectuer une opération sur toutes les valeurs, vous pouvez enregistrer beaucoup de calculs.
Semblable à ce que Mark E a proposé, vous devez créer le vôtre. Juste pour vous aider, il existe un article soigné http://gleichmann.wordpress.com/2008/01/15/building-your-own-literals-in-Java-tuples-and-maps/ ce qui vous donne une manière très soignée de créer des n-uplets et des cartes que vous voudrez peut-être envisager.