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
Что я неправильно понял?
Ответы
Ответ 1
Код работает нормально.
Заменить:
System.out.println(array);
С
System.out.println(Arrays.toString(array));
Вывод:
[b, c, a]
[b, c, a]
В представлении String
массива отображается "текстовое представление" массива, полученное Object.toString
- которое имя класса и хэш-код массива в виде шестнадцатеричной строки.
Ответ 2
для проверки полноты также java.util.Arrays.toString и java.util.Arrays.deepToString.
Последнее особенно полезно при работе с
вложенные массивы (например, Object [] []).
Ответ 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(), поэтому выход по умолчанию не используется, но для всех массивов.