Ist es möglich, ein Array zu haben, das zwei verschiedene Arten von Daten enthält? Ich möchte ein Array, das ein Double und auch eine Zeichenfolge enthält. Ich habe versucht:
%Vor%Aber das hat nicht funktioniert.
Entschuldigung für die dumme Frage, aber es ist schon eine Weile her, seit ich so etwas benutzt habe. Kann ich mein Gedächtnis auffrischen, wie ich ein solches Array deklarieren und füllen würde?
Und dann, um es noch einen Schritt weiter zu machen, würde ich gerne das Array nach dem Double sortieren, wenn möglich?
Danke!
Erstens lohnt es sich, über den Unterschied zwischen einem Array und einem ArrayList
klar zu sein - sie sind überhaupt nicht dasselbe.
In beiden Fällen können Sie jedoch nicht tun, was Sie wollen. Der nächstgelegene Ort, an den Sie wahrscheinlich kommen können, ist, Ihren eigenen Typ zu deklarieren. (BEARBEITEN: Mein ursprünglicher Code hatte eine doppelte oder eine Zeichenkette ... Ich habe sie jetzt zu einer doppelten und Zeichenkette geändert. Lassen Sie mich wissen, ob sich dies ändert < em> ist nicht was Sie im Sinn hatten.)
%Vor% Dann erstellen Sie ein ArrayList<DoubleAndString>
oder ein DoubleAndString[]
.
Nun fühlt sich das im Moment etwas an, vermutlich haben die Doppel- und String-Werte tatsächlich eine größere Bedeutung - zum Beispiel einen Namen und eine Partitur. Wenn ja, kapseln Sie das in einem Typ ein, der die Paarung passender beschreibt.
Wie bei der Bestellung - Sie könnten machen DoubleAndString
implementieren Comparable<DoubleAndString>
- aber wenn das nicht die einzige natürliche Reihenfolge ist, die Sinn macht, würde ich ein% co_de schreiben %:
Dann können Sie mit Comparator<DoubleAndString>
ein Collections.sort
oder ArrayList<DoubleAndString>
sortieren, um ein Array zu sortieren.
Sie können ArrayList<Object>
verwenden und dann alles verwenden, was Sie möchten. Verkapseln Sie double
in einem Double
-Objekt, und wenn Sie das Objekt abrufen, verwenden Sie instanceof
, um zu überprüfen, ob es wirklich ein double
oder ein String
ist.
Ich muss sagen, es ist unwahrscheinlich, dass dir dieses "Design" irgendwelche Preise einbringen würde. Ist es möglich, die Lösung, die Sie für Ihr Problem in Betracht ziehen, zu überdenken und zu prüfen, ob Sie mit einer anderen Herangehensweise umgehen könnten?
Vielleicht wissen Sie das bereits, aber es ist sicherlich keine gute Idee, verschiedene Typen in einer Liste zu speichern. Definitionsgemäß ist ein Array eine Sammlung von ähnlichen Objekten und die Füllung aller Arten darin macht die Dinge unscharf. Sie würden also lieber einen separaten Typ haben, um diese verschiedenen Werte zu halten.
Es klingt wie Sie eine Karte wollen. Da Sie die Map sortieren möchten, kann eine TreeMap optimal sein.
%Vor%Maps sind assoziativ. Jedem Double ist eine Zeichenfolge zugeordnet. Wenn Sie mehrere Zeichenfolgen pro Double möchten, können Sie ein
verwenden %Vor%Nun, wenn Sie ein Array mit einer beliebigen Anzahl von Elementen haben wollen, müssen Sie einfach einen Typ verwenden, der für beide ein gemeinsamer Vorfahr ist. In diesem Fall wäre das Object (da String und Double beide von Object erben). Dies erfordert jedoch, dass Sie die Typen überprüfen, wenn Sie sie abrufen oder verwenden.
Wenn Sie eine feste Anzahl von mehreren verschiedenen Typen verwenden, ist das, was Sie wirklich wollen, ein "Tupel". Java verfügt derzeit jedoch nicht über eine Implementierung von Tuple verfügbar. Für zwei Gegenstände:
%Vor% Sie können einfach ArrayList<object> arraylist
eingeben und dann können Sie alles einfügen, aber das ist vielleicht nicht das, was Sie wollen.
Um dann zu sortieren, würden Sie einfach Ihren eigenen Komparator verwenden, aber, wie schon erwähnt, sollen diese beiden Werte verbunden sein, oder haben Sie ein eindimensionales Array mit zwei verschiedenen Datentypen?
Tags und Links java