Java: преобразование набора в массив для представления String - PullRequest
32 голосов
/ 14 июня 2009

Из Sun Java Tutorial я бы подумал, что этот код преобразует набор в массив.

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

Однако, это дает

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

Что я неправильно понял?

Ответы [ 6 ]

32 голосов
/ 14 июня 2009

Код работает нормально.

Заменить:

System.out.println(array);

С:

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

Выход:

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

Представление String массива отображает «текстовое представление» массива, полученное Object.toString - это имя класса и хеш-код массива в виде шестнадцатеричного строка.

9 голосов
/ 14 июня 2009

для полноты проверьте также java.util.Arrays.toString и java.util.Arrays.deepToString .

Последнее особенно полезно при работе с вложенные массивы (например, Object [] []).

5 голосов
/ 14 июня 2009

Все нормально.

Вы не видите содержимое массива с System.out.println (массив), потому что println вызывает object.toString (), чтобы получить байты из объекта для вывода.

Поскольку HashSet переопределяет реализацию toString () по умолчанию, вы можете увидеть установленное содержимое с помощью System.out.println (set);

Поскольку массивы не переопределяют стандартную функцию toString () (которая дает имя класса и некоторый хэш-код идентификации), вы получаете нечеткий [Ljava.lang.String; @ 9b49e6

Надеюсь, что поможет

2 голосов
/ 14 июня 2009

Как упоминалось в dfa, вы можете просто заменить:

System.out.println(array);

с ...

System.out.println(Arrays.toString(array));
1 голос
/ 14 июня 2009

Я не думаю, что вы что-то неправильно поняли; код должен работать. Массив, однако, недостаточно умен, чтобы напечатать его содержимое в методе toString, поэтому вам придется печатать содержимое с помощью

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

или что-то в этом роде.

0 голосов
/ 14 июня 2009

У вас правильный результат. К сожалению, метод toString () в массиве по-прежнему является исходным Object.toString (), поэтому выходные данные по умолчанию несколько непригодны, но это касается всех массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...