web-dev-qa-db-fra.com

Java: Conversion d'un ensemble en tableau pour la représentation sous forme de chaîne

D'après Sun Java Tutorial , j'aurais pensé que ce code convertirait un ensemble en tableau.

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);
    }
}

Cependant, cela donne

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

Qu'est-ce que j'ai mal compris?

32
inglesp

Le code fonctionne bien.

Remplacer:

System.out.println(array);

Avec:

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

Sortie:

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

La représentation String d'un tableau affiche une "représentation textuelle" du tableau, obtenue par Object.toString - qui est le nom de la classe et le code de hachage du tableau sous forme de chaîne hexadécimale.

32
coobird

par souci d'exhaustivité, vérifiez également Java.util.Arrays.toString et Java.util.Arrays.deepToString

Ce dernier est particulièrement utile lorsqu'il s'agit de tableaux imbriqués (Comme Object [] []).

9
dfa

C'est bon.

Vous ne voyez pas le contenu du tableau avec System.out.println (tableau) car println Appelle object.toString () pour obtenir les octets d'un objet pour la sortie.

Etant donné que HashSet substitue l'implémentation toString () par défaut, vous pouvez voir le contenu de l'ensemble avec System.out.println (set);

Comme les tableaux ne surchargent pas toString () par défaut (qui donne le nom de la classe et une sorte de code de hachage d'identité), vous obtenez le fuzzy [Ljava.lang.String; @ 9b49e6

J'espère que cela pourra aider

5
Reginaldo

Comme mentionné ci-dessus, vous pouvez simplement remplacer:

System.out.println(array);

avec...

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

Je ne pense pas que vous ayez mal compris quoi que ce soit; le code devrait fonctionner. Le tableau, cependant, n’est pas assez intelligent pour imprimer son contenu avec la méthode toString. Vous devez donc imprimer le contenu avec

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

ou quelque chose comme ça.

1
jpalecek

Vous avez le bon résultat. Malheureusement, la méthode toString () du tableau est toujours la Object.toString () d'origine. Le résultat est donc un peu inutilisable par défaut, mais cela s'applique à tous les tableaux.