9
votes

Tableaux de différents types

est-il possible d'avoir un tableau contenant deux types de données différents? Je veux avoir un tableau contenant un double et une chaîne. J'ai tenté: xxx

mais cela n'a pas fonctionné.

Désolé pour la question idiote, mais cela a été un moment depuis que j'ai utilisé quelque chose comme ça. Vous rafraîchissez ma mémoire sur la façon dont je vais déclarer et peupler un tel tableau?

puis prendre une étape plus loin, je voudrais trier le tableau par le double si possible?

Merci!


1 commentaires

Non, ce n'est pas possible. Qu'est-ce que vous essayez de faire exactement? Peut-être que nous pouvons vous aider à trouver une solution de contournement.


10 Réponses :


3
votes

On dirait que vous voulez une carte. Depuis que vous souhaitez trier la carte, un Treemap peut être optimal.

Map<Double, ArrayList<String>>


0 commentaires

14
votes

Tout d'abord, il vaut la peine d'être clair sur la différence entre un tableau et une arrayliste code code> - ils ne sont pas la même chose du tout.

Cependant, dans les deux cas, vous ne pouvez pas faire quoi vous voulez. Le plus proche que vous puissiez probablement venir, est de déclarer votre propre type. (Modifier: Mon code d'origine avait un double ou em> une chaîne ... Je l'ai maintenant changé pour être un double et em> une chaîne. Laissez-moi savoir si ce changement est EM> n'est pas em> ce que vous aviez à l'esprit.) p> xxx pré>

puis crée un arrayliste code> ou un ou un DOUBLETERNDSTRING [] CODE>. P>

MAINTENANT, cela se sent quelque peu vanille au moment - vraisemblablement, les valeurs de double et de chaîne ont une signification plus importante - un nom et un score, par exemple. Si tel est le cas, encapsulez-le dans un type décrivant le couplage de manière plus appropriée. P>

comme pour la commande - vous pourrait em> faire double-udant code> implémenter comparable DoubleantRing> code> - mais à moins que ce soit le seul em> commande naturel qui a du sens, j'écrirais un comparateur CODE>: P>

public class DoubleComparator implements Comparator<DoubleAndString>
{
    public int compare(DoubleAndString ds1, DoubleAndString ds2)
    {
        return Double.compare(ds1.getDouble(), ds2.getDouble());
    }
}


1 commentaires

+1, battu. Cela allait être ma suggestion et mon type de données personnalisé.



1
votes

Que voulez-vous faire?

Si ce n'est pas une cartographie de la valeur clé, vous devez créer une nouvelle classe pour cela.


0 commentaires

2
votes

Eh bien, si vous souhaitez avoir un tableau avec un nombre arbitraire d'éléments, vous devez simplement utiliser un type d'ancêtre commun aux deux. Dans ce cas, ce serait un objet (puisque la chaîne et double hériter de l'objet). Cela vous obligera à vérifier les types, cependant, lorsque vous récupérez ou utilisez-les.

Si vous utilisez un nombre fixe de multiples types différents, ce que vous voulez vraiment, c'est un "tuple". Cependant, Java n'a actuellement aucune implémentation de tuple disponible. Pour deux éléments: xxx


0 commentaires

2
votes

Vous pouvez simplement faire ArrayList ArrayList , puis vous pouvez y mettre quoi que ce soit, mais ce n'est peut-être pas ce que vous voulez.

Ensuite, pour trier Vous utiliseriez simplement votre propre comparateur, mais, car les théâtres mentionnés, ces deux valeurs sont censées être connectées ou avez-vous un tableau à laimension unique avec deux types de données différents?


0 commentaires

7
votes

Vous pouvez utiliser arraylist et vous pouvez ensuite utiliser quelque chose que vous souhaitez. Encapsuler le double dans un objet double et lorsque vous récupérez l'objet Utiliser l'objet instance de pour vérifier si c'est vraiment un double ou une chaîne .

Je dois dire que c'est peu probable que cette "conception" vous gagne des récompenses. Est-il possible de repenser la solution que vous envisagez de votre problème et de voir si vous pouviez faire avec un autre type d'approche?


0 commentaires

3
votes

Vous le savez peut-être déjà, mais ce n'est certainement pas une bonne idée de stocker différents types dans une liste. Par définition, un tableau est une collection d'objets similaires et de farcissement de toutes sortes de choses en cela rend les choses floues. Donc, vous préférez avoir un type séparé pour contenir ces différentes valeurs.


0 commentaires

2
votes

Une arrayliste par définition ne contient qu'un objet par position. Vous pouvez faire quelque chose comme ceci: xxx

Vous pouvez ensuite utiliser la méthode Collections.sort () pour le trier par les doubles.


0 commentaires

0
votes

Vous voudrez peut-être regarder la classe de base numérique. XXX PRE>

Vous pouvez interpréter les numéros en tant que chaînes, à l'aide de numérosformat: p>

NumberFormat formatter = new DecimalFormat("#.##");
String s = formatter.format(list.get(0));


0 commentaires

0
votes

Si vous n'essayez pas de faire des comparaisons / triez sur le tableau, vous pouvez créer quelque chose comme ci-dessous:

liste de liste = nouveau arraylist ();

Sinon, la réponse de Jon Skeet était la meilleure approche.


0 commentaires