Передача массива, содержащего данные, методу 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 гласит:

toArray (T [] a)

Если список помещается в указанный массив с достаточным пространством (т. Е. Массив содержит больше элементов, чем список), элемент в массиве, следующий сразу за концом списка, устанавливается равным нулю. (Это полезно при определении длины списка, только если вызывающая сторона знает, что список не содержит нулевых элементов.)

Вот как LinkedList.toArray работает. В основном вы просите, чтобы список, содержащий 7 элементов, был обернут в массив размером 9 элементов.

7-й элемент null из-за этого кода внутри toArray метод:

    if (a.length > size)
        a[size] = null;

и 8-й элемент остается I из начального состояния этого массива.

Другие вопросы по тегам