2009-06-14 9 views
32

Von Sun Java Tutorial hätte ich gedacht, dass dieser Code ein Set in ein Array konvertieren würde.Java: Konvertieren eines Satzes in ein Array für String-Darstellung

import java.util.*; 

public class Blagh { 
    public static void main(String[] args) { 
     Set<String> set = new HashSet<String>(); 
     set.add("a"); 
     set.add("b"); 
     set.add("c"); 
     String[] array = set.toArray(new String[0]); 
     System.out.println(set); 
     System.out.println(array); 
    } 
} 

Allerdings gibt diese

[a, c, b] 
[Ljava.lang.String;@9b49e6 

Was habe ich falsch verstanden?

+2

"[Ljava.lang.String; @ 9b49e6" ist ein Array von Strings. – Fredrik

+0

War die Reihenfolge der Elemente genau darin? Ich habe eine ähnliche Situation, in der die Reihenfolge eine eigene Meinung zu haben scheint und nicht in der Reihenfolge, in der Artikel hinzugefügt wurden. – electrichead

+0

Sets haben im Allgemeinen keine definierte Reihenfolge, Sie können sich also nicht auf die Reihenfolge verlassen, in der Sie die Elemente in das Set einfügen, die der Reihenfolge entsprechen, in der Sie sie erhalten. Versuchen Sie die LinkedHashSet-Implementierung der Set-Schnittstelle, wenn Sie das möchten; es fügt diese Garantie hinzu. – Frans

Antwort

32

Der Code funktioniert gut.

Replace:

System.out.println(array); 

mit:

System.out.println(Arrays.toString(array)); 

Output:

 
[b, c, a] 
[b, c, a] 

Die String Darstellung eines Arrays zeigt das eine "Textdarstellung" des Arrays, erhalten durch Object.toString - das ist der Klassenname und der Hash-Code des Arrays als a Hexadezimale Zeichenfolge.

+0

Einige Teile von Java können ein bisschen unfreundlich sein. – coobird

+1

Das ist nicht die Adresse, aber Object.hashCode() ... – Joey

+0

Guter Anruf, ich werde das beheben, danke! – coobird

1

Ich glaube nicht, dass Sie irgendetwas missverstanden haben; Der Code sollte funktionieren. Das Array ist jedoch nicht intelligent genug, um seinen Inhalt in der toString-Methode zu drucken, so dass Sie die Inhalte mit

for(String s : array) println(s); 

oder so etwas drucken müssen.

5

Es ist OK.

Der Array-Inhalt wird nicht mit System.out.println (Array) angezeigt, da println object.toString() aufruft, um die Bytes von einem Objekt zur Ausgabe zu erhalten.

Da HashSet die standardmäßige toString() - Implementierung überschreibt, können Sie den Satzinhalt mit System.out.println (set);

Da Arrays nicht den Standard toString() überschreiben (das gibt den Klassennamen und eine Art von Identität Hash-Code), haben Sie die Fuzzy-[Ljava.lang.String bekommen; @ 9b49e6

Hoffnung, die hilft

9

der Vollständigkeit halber auch java.util.Arrays.toString und java.util.Arrays.deepToString überprüfen.

Letzteres ist besonders nützlich, wenn verschachtelte Arrays (wie Objekt [] []) mit behandelt werden.

+0

Ich stimme zu, es ist gut, nicht, dass diese Methoden effizienter als das Erstellen einer Zwischenliste über asList(), insbesondere für große Arrays sind. Beachten Sie, dass deepToString() am nützlichsten für mehrdimensionale Arrays und komplexe Verschachtelung ist. –

2

Wie DFA erwähnt, können Sie einfach ersetzen:

System.out.println(array); 

mit ...

System.out.println(Arrays.toString(array)); 
0

Sie das richtige Ergebnis haben. Leider ist die toString() - Methode für das Array immer noch die ursprüngliche Object.toString(), so dass die Ausgabe standardmäßig nicht verwendet werden kann, aber das gilt für alle Arrays.

Verwandte Themen