Добавление одного элемента в ArrayList добавляет еще 11 нулевых элементов? - PullRequest
0 голосов
/ 15 апреля 2011

Я заполняю ArrayList 'pts' Баллов.

Мне это кажется довольно простым, но после этого запуска в массиве есть нулевые элементы.

for(int i =0; i< currentt.getPointCount();i++){
   File pXml = new File(tourFolderPath + "point_" + (i+1) +".xml");
   if (pXml.exists()){
      pt = (Point)MXP.createObject(pXml, 2);
   }
   pts.add(pt);
}

После проверки в отладчике кажется, что в первый раз строка "pts".добавить (пт);»при запуске он добавляет один законный точечный элемент.Тем не менее, он также добавляет 10 других нулевых элементов.

Есть идеи?

Ответы [ 5 ]

6 голосов
/ 15 апреля 2011

ArrayList содержит начальную емкость 10.

2 голосов
/ 15 апреля 2011

Я просто запустил простую программу в моем отладчике, и вы поймете, о чем все говорят.Инициализация создает 10 пустых записей.Эти нулевые записи не доступны.Вот почему размер отображается как 0. Если вы добавите элемент, размер изменится на 1.
Screenshot of ArrayList in debugger, indicating the size as 0

2 голосов
/ 15 апреля 2011

Если вы посмотрите на ArrayList через отладчик, вы, вероятно, увидите, что это резервный массив , и этот массив равен ArrayLists емкость .

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

Если вы посмотрите на атрибут size ArrayList, вы, вероятно, увидите правильное количество элементов.

1 голос
/ 15 апреля 2011

Когда вы делаете new ArrayList();, он создает его с начальной емкостью, равной 10. Вы можете изменить это поведение, передавая int в конструктор.Подробнее здесь .

1 голос
/ 15 апреля 2011

похоже, что pXml.exists() это true в первый раз и false в другое время.

Вы все равно добавляете pt, даже если pXml не существует.

Пожалуйста, укажите больше кода.

...