27 votes

Java: conversion d'un ensemble en tableau pour la représentation de chaînes

D'après le tutoriel Java de Sun, 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?

28voto

coobird Points 70356

Le code fonctionne bien.

Remplacer:

 System.out.println(array);
 

Avec:

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

Production:

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

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

9voto

dfa Points 54490

pour des raisons 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 [] []).

5voto

Reginaldo Points 534

C'est OK.

Vous ne voyez pas le contenu du tableau avec le Système.out.println(array) parce que println les appels de l'objet.toString() pour obtenir les octets d'un Objet pour la sortie.

Depuis HashSet remplace la valeur par défaut toString() de la mise en œuvre, vous pouvez voir l'ensemble du contenu avec le Système.out.println(set);

Comme les tableaux de ne pas remplacer la valeur par défaut toString() (qui donne le nom de la classe et de l'identité de code de hachage), vous obtenez le floue [Ljava.lang.Chaîne;@9b49e6

Espère que ça aide

2voto

David Points 159

Comme mentionné DFA, vous pouvez simplement remplacer:

 System.out.println(array);
 

avec...

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

1voto

jpalecek Points 31928

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 dans la méthode toString, vous devrez donc imprimer le contenu avec

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

ou quelque chose comme ça.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X