Création d'une liste de paires en java

quelle classe conviendrait le mieux pour une liste non-ordonnée de paires? Je vais prendre un tas de (float,bref) paires et devra être capable d'effectuer des calculs simples (comme la multiplication de la paire ensemble pour renvoyer un seul flotteur, etc). List ne prend qu'un seul argument, et HashMap n'autorise pas les doublons (pour autant que je sache). Toutes les pensées?

24
demandé sur V1rtua1An0ma1y 2011-01-24 03:45:55

6 réponses

vous pouvez utiliser la classe Entry<U,V> que 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; }
}

ensuite, bien sûr, faire un List en utilisant cette nouvelle classe, par exemple:

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

vous pouvez aussi toujours faire un List s de List s, mais il devient difficile d'appliquer la taille (que vous n'avez que des paires) et vous seriez requis, comme avec les tableaux, d'avoir un typage cohérent.

39
répondu 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 n'importe quoi d'autre. Alors juste

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

cette approche a l'avantage de satisfaire à cette exigence" effectuer des mathématiques simples (comme la multiplication de la paire ensemble pour retourner un flotteur simple, etc) " propre, parce que votre classe personnalisée peut avoir des méthodes pour toutes les mathématiques que vous avez besoin de faire...

11
répondu hvgotcodes 2011-01-24 00:52:43

seulement pour réparer quelques petites erreurs dans Mark Elliot code:

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
répondu andresp 2011-04-23 11:40:41

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

1
répondu Shezan Baig 2017-05-23 11:45:49

similaire à ce que Mark E a proposé, vous devez venir avec votre propre. 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 / qui vous donne une façon vraiment soignée de créer des tuples et des cartes qui pourraient être quelque chose que vous pourriez vouloir considérer.

0
répondu gbvb 2011-01-24 00:55:12

si vous voulez des multiplicités, vous pouvez le mettre dans la carte qui correspond à 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
répondu Alpedar 2011-01-24 12:31:14