String a []= {null,null,null,null,null};
//add array to arraylist
ArrayList<Object> choice = new ArrayList<Object>(Arrays.asList(a));
System.out.println(choice.size());
Почему размер arrayList choice
5, когда все элементы были установлены на null
Потому что в списке массивов все еще есть 5 элементов. Они могут быть нулевыми, но они все еще присутствуют в списке.
Вы можете очистить ArrayList, вызвав choice.clear();
Я думаю, что вас смущает то, что вы думаете об ArrayList как об ArrayList объектов, а не как об ArrayList ссылок на объекты.
ArrayList of Object представляет собой доступный по индексу список ссылок на объекты.
Допустимо, чтобы такая ссылка не ссылалась на реальный объект, а была "null".
Следовательно, у вас есть пять "слотов" ссылок, каждый из которых имеет значение null.
Это не то же самое, что серия из четырех нулей или нулей.
Посмотрите на ваш исходный и примитивный массив строк - его длина равна пяти, а не нулю.
Или еще проще: когда у вас есть класс с полем типа Object, оно все равно занимает место, независимо от того, ссылается ли оно на что-то или является нулем. В противном случае вы не смогли бы инстанцировать класс и не нуждались бы в перераспределении пространства, когда вы действительно присвоили что-то полю.
Это связано с тем, что ArrayList не равен null, он содержит пять объектов (все они равны null), в любом случае ArrayList никогда не будет иметь нулевой размер, по крайней мере, размер равен 0 (ноль), и если ArrayList не инициализирован (равен null) и вы попытаетесь получить доступ к функции size(), он выведет исключение NullPointerException. Я надеюсь, что эта информация будет полезна для вас, и извините за мой плохой английский :(
Из документации Javadocs для ArrayList:
Реализация интерфейса списка с изменяемым размером массива. Реализует все необязательные операции со списком и разрешает все элементы, включая null.
ArrayLists может содержать нулевые элементы, поэтому размер равен пяти. Имейте в виду, что если вы просто объявите новый ArrayList (5)
, он будет иметь начальную емкость 5, но size ()
будет равен 0.