Création d'une liste de paires en java


Quelle classe fonctionnerait le mieux pour une liste non ordonnée de paires? Je vais prendre un tas de paires (flottantes,courtes) et j'aurai besoin de pouvoir effectuer des calculs simples (comme multiplier la paire ensemble pour retourner un seul flotteur, etc.). List ne prend qu'un seul argument, et HashMap n'autorisera pas les doublons (pour autant que je sache). Toutes les pensées?

Author: V1rtua1An0ma1y, 2011-01-24

6 answers

Vous pouvez utiliser le Entry<U,V> classe HashMap utilise, mais vous serez coincé avec sa sémantique de getKey et getValue:

List<Entry<Float,Short>> pairList = //...

Ma préférence serait de créer votre propre simple Pair classe:

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; }
}

Alors bien sûr, faites un List en utilisant cette nouvelle classe, par exemple:

List<Pair<Float,Short>> pairList = new ArrayList<Pair<Float,Short>>();

Vous pouvez également toujours faire un Lists de List s, mais il devient difficile d'imposer le dimensionnement (que vous n'avez que des paires) et vous seriez obligé, comme avec les tableaux, d'avoir un typage cohérent.

 39
Author: Mark Elliot, 2012-12-30 04:28:44

Utilisez une liste d'instances de classe personnalisées. La classe personnalisée est une sorte de paire ou de coordonnée ou autre. Alors juste

List<Coordinate> = new YourFavoriteListImplHere<Coordinate>()

Cette approche a l'avantage de rendre la satisfaction de cette exigence "effectuer des mathématiques simples (comme multiplier la paire ensemble pour renvoyer un seul flotteur, etc.)" propre, car votre classe personnalisée peut avoir des méthodes pour tout ce que vous devez faire...

 11
Author: hvgotcodes, 2011-01-24 00:52:43

Juste réparer 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; }
}
 4
Author: andresp, 2011-04-23 11:40:41

On dirait que vous devez créer votre propre classe de paires (voir discussion ici). Ensuite, faites une liste de cette classe de paires que vous avez créée

 1
Author: Shezan Baig, 2017-05-23 11:45:49

Semblable à ce que Mark E a proposé, vous devez trouver le vôtre. Juste pour vous aider un peu, il y a un article soignéhttp://gleichmann.wordpress.com/2008/01/15/building-your-own-literals-in-java-tuples-and-maps/ ce qui vous donne une façon vraiment soignée de créer des tuples et des cartes qui pourraient être quelque chose que vous voudrez peut-être considérer.

 0
Author: gbvb, 2011-01-24 00:55:12

Si vous voulez des multiplicités, vous pouvez le mettre dans map qui mappe la paire à ammount. De cette façon, il n'y aura qu'une seule paire de valeurs données, mais il peut représenter plusieurs événements.

Alors, si vous avez beaucoup de repeatet valeurs et souhaitez effectuer une opération sur toutes les valeurs, vous pouvez économiser beaucoup de calculs.

 0
Author: Alpedar, 2011-01-24 12:31:14