Нет проблем
Вы код действительно вернет 4, как вы ожидали, а не 1, как вы заявил.
Я принял Ваш код как есть, добавив дополнительно println
и изменяющий остальные println
.
int size = 4;
ArrayList<String> testArr = new ArrayList<String>();
String[] test = null;
for (int i = 0 ; i < size ; i ++) {
testArr.add ("test");
test = testArr.toArray (new String[ 0 ]);
System.out.println ("i: " + i + " | test: " + Arrays.toString (test));
}
System.out.println ("test.length: " + test.length);
я: 0 | тест: [тест]
i: 1 | тест: [тест, тест]
i: 2 | тест: [тест, тест, тест]
i: 3 | Тест: [тест, тест, тест, тест]
test.length: 4
Обязательно прочитайте класс документ, чтобы понять поведение этой команды:
ArrayList::toArray(array)
Возвращает массив, содержащий все элементы в этом списке в правильной последовательности (от первого до последнего элемента); тип выполнения возвращаемого массива - тип указанного массива. Если список соответствует указанному массиву, он возвращается в нем. В противном случае новый массив выделяется типом среды выполнения указанного массива и размером этого списка.
Если список соответствует указанному массиву с запасным номером (т. Е. Массив имеет больше элементов, чем список), элемент в массиве сразу же после окончания коллекции устанавливается в нуль. (Это полезно при определении длины списка, только если абонент знает, что список не содержит нулевых элементов.)
Этот код фактически печатает 4. – Eran
, что это версия Java, что вы используете? –
Я не понимаю, в чем проблема, но зачем вы преобразовываете arraylist в массив: у arraylist также есть метод size() ... – Lucurious