Как установить размер arrayList как ноль? - PullRequest
5 голосов
/ 01 апреля 2010
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

Ответы [ 4 ]

4 голосов
/ 01 апреля 2010

Я думаю, что вас смущает то, что вы рассматриваете ArrayList как ArrayList объектов, а не как ArrayList ссылок на объекты.

ArrayList of Object представляет доступный для индекса список ссылки на объекты.

Для такой ссылки допустимо не ссылаться на реальный объект, а вместо этого быть "нулевым".

Следовательно, у вас есть пять ссылок "slots ", каждый со значением null.

Это не то же самое, что последовательность из четырех нулей или нулевых нулей.

Посмотрите на ваш исходный и примитивный массив строк - его длина равна пяти, а не нулю.

Или даже проще, когда у вас есть класс с полем типа Object, он по-прежнему занимает место, независимо от того, ссылается ли он на что-то или имеет значение null.В противном случае вы не сможете создать экземпляр класса и не будете нуждаться в его перераспределении, когда вы действительно назначаете что-то полю.

2 голосов
/ 01 апреля 2010

Потому что у arraylist все еще есть 5 элементов. Они могут быть нулевыми, но они все еще присутствуют в списке.

Вы можете очистить ArrayList, вызвав choice.clear();

1 голос
/ 01 апреля 2010

Это потому, что ArrayList не является нулевым, он содержит пять объектов (все являются нулевыми), в любом случае ArrayList никогда не будет иметь нулевой размер, по крайней мере, размер равен 0 (нулю), и если ArrayList не инициализирован ( является нулевым), и вы пытаетесь получить доступ к функции size (), она выдаст исключение NullPointerException. Я надеюсь, что эта информация будет полезна для вас, и извините за мой плохой английский: (* ​​1001 *

1 голос
/ 01 апреля 2010

Из Javadocs для ArrayList:

Реализация массива изменяемого размера Список интерфейса. Реализует все необязательные операции со списком и разрешения все элементы, включая ноль.

ArrayLists может содержать нулевые элементы, поэтому размер равен пяти. Имейте в виду, что если вы просто объявите new ArrayList(5), его начальная емкость будет равна 5, но size() будет равно 0.

...