Arrays verschiedener Typen

8

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!

    
Tyler 12.05.2010, 01:48
quelle

10 Antworten

14

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 %:

%Vor%

Dann können Sie mit Comparator<DoubleAndString> ein Collections.sort oder ArrayList<DoubleAndString> sortieren, um ein Array zu sortieren.

    
Jon Skeet 12.05.2010, 01:51
quelle
5

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?

    
roguesys 12.05.2010 01:54
quelle
3

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.

    
theraneman 12.05.2010 01:54
quelle
2

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%     
Yann Ramin 12.05.2010 01:50
quelle
2

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%     
Michael Aaron Safyan 12.05.2010 01:51
quelle
2

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?

    
James Black 12.05.2010 01:52
quelle
2

Eine ArrayList enthält definitionsgemäß nur ein Objekt pro Position. Sie könnten so etwas tun:

%Vor%

Sie können dann die Collections.sort () -Methode verwenden, um sie nach den Doubles zu sortieren.

    
Affe 12.05.2010 01:55
quelle
1

Was möchten Sie tun?

Wenn es sich nicht um eine Schlüsselwertzuordnung handelt, sollten Sie hierfür eine neue Klasse erstellen.

    
Maxem 12.05.2010 01:51
quelle
0

Vielleicht möchten Sie sich die Basisklasse Number ansehen.

%Vor%

Sie können die Zahlen unter Verwendung von NumberFormat als Zeichenfolgen interpretieren:

%Vor%

Auch wenn dies nicht das ist, was Sie wollen, sind Sie ein bisschen zu wenig über Ihr Endziel.

    
Justin 12.05.2010 02:41
quelle
0

Wenn Sie im Grunde genommen keine Vergleiche / Sortierungen für die ArrayList durchführen, können Sie etwas wie folgt erstellen:

Listenliste = new ArrayList ();

sonst .. Jon Skeets Antwort war der beste Ansatz.

    
Phani 12.05.2010 08:49
quelle

Tags und Links