Передача массива, содержащего данные, методу toArray в List
У меня есть такой код:
String[] colors = {"black", "blue", "yellow", "red", "pink", "green", "cyan"};
String[] alphabets = {"A", "B", "C", "D", "E", "F", "G", "H", "I"};
LinkedList<String> links = new LinkedList<>(Arrays.asList(colors));
System.out.println(links);
colors = links.toArray(alphabets);
System.out.println(Arrays.asList(colors));
и его вывод:
[black, blue, yellow, red, pink, green, cyan]
[black, blue, yellow, red, pink, green, cyan, null, I]
что это за ноль во второй строке вывода и почему?
2 ответа
Наилучшим источником ответов, когда у вас есть вопрос относительно конкретного поведения метода, является проверка документации.
Документ Java гласит:
Если список помещается в указанный массив с достаточным пространством (т. Е. Массив содержит больше элементов, чем список), элемент в массиве, следующий сразу за концом списка, устанавливается равным нулю. (Это полезно при определении длины списка, только если вызывающая сторона знает, что список не содержит нулевых элементов.)
Вот как LinkedList.toArray
работает. В основном вы просите, чтобы список, содержащий 7 элементов, был обернут в массив размером 9 элементов.
7-й элемент null
из-за этого кода внутри toArray
метод:
if (a.length > size)
a[size] = null;
и 8-й элемент остается I
из начального состояния этого массива.