2010-11-24 5 views
-1

Привет У меня есть вопрос, что в нижеследующем коде нам нужно написать n--;?Уменьшение размера архиватора

 int n = pointList.size(); 
    for(int i=pointList.size()-1;i>=0;i--){ 
     for(int j=0;j<list.size();j++){ 
      if(pointList.get(i).equals(list.get(j))){ 
       pointList.remove(i); 
       n--; 
      } 
     } 
    } 

Также список является списком массивов. спасибо.

+4

чувак, вам нужно написать больше информации о том, что вы хотите. – Seva 2010-11-24 16:31:11

+0

, вы должны остановить цикл над `j` после удаления элемента` ith`, потому что вы будете получать доступ к элементу `` `` `pointList` в следующей итерации внутреннего (` j`) цикла ... – 2010-11-24 16:33:44

ответ

6

ArrayList подкрепляется массивом, который начинается с фиксированного размера и изменяется только в том случае, если ему нужен больший размер. Насколько мне известно, вы можете сжать только размер ArrayList «s резервного хранилища, используя trimToSize()

Если размер магазина важно, рассмотреть возможность использования LinkedList вместо этого.

Примечание:

Если я правильно читать ваш код, вы можете заменить весь код, которого Вы отправляли сообщение только это вместо:

pointList.removeAll(list); 
0

Нет, у вас нет, поскольку n никогда не читается нигде.

Я считаю, что это реликт ранее, где разработчик добавил это либо для использования n в инструкции debug.print, либо в утверждении.

+1

Я думаю, что подразумевается использование n дальше. Но поскольку pointlist.size вернет скорректированный размер (если только это не реализовано, «remove» отрегулирует размер), нет необходимости отслеживать его с помощью n. – 2010-11-24 16:29:54

+0

Откуда взялся -1? И почему? – Daniel 2010-11-24 16:35:21

0

Поскольку на самом деле вопрос здесь не задается, я буду угадывать. Я предполагаю, что объявление int n = pointList.size(); является избыточным. Поскольку у вас всегда будет pointList, он будет знать его размер. Также я готов поспорить, что собирается бросить исключение с одновременной модификацией.

0

Поскольку ArrayList будет уменьшаться его размер каждый раз, когда вы удалите элемент, который вам не нужно использовать n вообще.

если вы сделаете следующее после каждой итерации, он будет достичь того же результата:

pointList.remove (pointList.size() - 1);

-1 существует, потому что, очевидно, массивы начинаются с 0.

0

Хорошо, я предполагаю, что вы хотите сохранить размер PointList хранится в п до настоящего времени. В этом случае вам нужно уменьшить n. Но вы можете просто назначить n после цикла double for.

Смежные вопросы