Подтвердить что ты не робот

Java: преобразование набора в массив для представления строк

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

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

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

4b9b3361

Ответ 1

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

Заменить:

System.out.println(array);

С

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

Вывод:

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

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

Ответ 3

Все в порядке.

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

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

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

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

Ответ 4

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

System.out.println(array);

с...

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

Ответ 5

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

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

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

Ответ 6

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