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

оложим, у меня есть этот код:

String[] left = { "1", "2" };
String[] leftNew = Collections.emptyList().toArray(left);
System.out.println(Arrays.toString(leftNew));

Это напечатает[null, 2], Этотвроде, как бы, что-то вроде Имеет смысл, так как у нас есть пустой список, это так или иначе предполагает, что мы справляемся с тем фактом, что мы передаем массив, который больше и устанавливает первый элемент в нуль. Это, вероятно, говорит о том, что первый элемент не существует в пустом списке, поэтому он установлен вnull.

Но это все еще сбивает с толку, так как мы передаем массив с определенным типом только для того, чтобы помочь вывести типвозвращенный массив; но в любом случае это то, что имеет хотя бы определенную логику. Но что, если я сделаю:

String[] right = { "nonA", "b", "c" };
// or Collections.singletonList("a");
// or a plain List or Set; does not matter
String[] rightNew = Collections.singleton("a").toArray(right);
System.out.println(Arrays.toString(rightNew));

Принимая предыдущий пример в качестве ссылки, я ожидал, что этот пример покажет:

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

Но, немного неожиданно для меня, он печатает:

[a, null, c]

И, конечно же, я перехожу к документации, которая явно говорит, что это ожидается:

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

Хорошо, хорошо, это как минимум задокументировано. Но позже говорится:

Это полезно при определении длины этого набора, только если вызывающая сторона знает, что этот набор не содержит нулевых элементов.

Это часть документации, которая меня больше всего смущает: |

И еще один забавный пример, который не имеет большого смысла для меня:

String[] middle = { "nonZ", "y", "u", "m" };
List<String> list = new ArrayList<>();
list.add("z");
list.add(null);
list.add("z1");
System.out.println(list.size()); // 3

String[] middleNew = list.toArray(middle);
System.out.println(Arrays.toString(middleNew));

Это напечатает:

[z, null, z1, null]

Таким образом, он удаляет последний элемент из массива, но почему бы не сделать это в первом примере?

Может кто-нибудь пролить свет здесь?

Ответы на вопрос(4)

Ваш ответ на вопрос