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é: mais cela n'a pas fonctionné. P> 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? p> puis prendre une étape plus loin, je voudrais trier le tableau par le double si possible? P> Merci! P> p>
10 Réponses :
On dirait que vous voulez une carte. Depuis que vous souhaitez trier la carte, un Treemap peut être optimal.
Map<Double, ArrayList<String>>
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> puis crée un 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 arrayliste ou un DOUBLETERNDSTRING [] CODE>. P> 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 public class DoubleComparator implements Comparator<DoubleAndString>
{
public int compare(DoubleAndString ds1, DoubleAndString ds2)
{
return Double.compare(ds1.getDouble(), ds2.getDouble());
}
}
+1, battu. Cela allait être ma suggestion et mon type de données personnalisé.
Que voulez-vous faire? p>
Si ce n'est pas une cartographie de la valeur clé, vous devez créer une nouvelle classe pour cela. P>
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: p>
Vous pouvez simplement faire 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? P> ArrayList
Vous pouvez utiliser 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? P> arraylist double code> dans un objet code> double code> et lorsque vous récupérez l'objet Utiliser l'objet instance de code> pour vérifier si c'est vraiment un double code> ou une chaîne code>. p>
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. P>
Une arrayliste par définition ne contient qu'un objet par position. Vous pouvez faire quelque chose comme ceci: Vous pouvez ensuite utiliser la méthode Collections.sort () pour le trier par les doubles. P> P>
Vous voudrez peut-être regarder la classe de base numérique. 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));
Si vous n'essayez pas de faire des comparaisons / triez sur le tableau, vous pouvez créer quelque chose comme ci-dessous: P>
liste de liste = nouveau arraylist (); p>
Sinon, la réponse de Jon Skeet était la meilleure approche. P>
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.