Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление нескольких элементов из LinkedList, метод remove(int index) все двигает 
V
    Опции темы
AbdulBcex
Дата 17.6.2010, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 6.11.2009

Репутация: нет
Всего: 1



Всем здравствовать. Вопрос назрел, помогите, пожалуйста.

Код

int w;
...
LinkedList list1 = new LinkedList();
LinkedList list2 new LinkedList();
...
for(int qB = 0; qB < purged.size(); qB++){
         for(int qA = 0; qA < purged.size(); qA++){
                    
    if(list1.get(qA).getValue() - list2.get(qB).getValue() > w){
            
                        list2.remove(qB);
                        
            list2.add(qB, new DataTuple(qB, element));//без этой строки будет IndexOutOfBoundsException
                
            }
    }
            
}


Как вообще в принципе в такой ситуации действовать? Только ловить исключение нельзя, должны быть удалены все элементы удвлетворяющие условию, а оператор remove() вычитает индексы и уменьшает список, видимо поэтому индексы растут соответственно первому значению. 
Или все-таки лыжи не едут?
PM MAIL   Вверх
MaxPayneC
Дата 17.6.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 18.2.2006

Репутация: 5
Всего: 9



Удалять из коллекции в цикле, итерирующимся по ней, корректно можно только с помощью iterator.remove().
PM   Вверх
EnJ
Дата 17.6.2010, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010
Где: Харьков

Репутация: нет
Всего: нет



Чему равно purged.size()? Он совпадает с размером list2?
Конечно он будет бросать иксепшн, если не добавлять новые элементы. Скорее всего purged.size() > list2.size().
Или удаляя элемент ты автоматически уменьшаешь размер листа и сдвигаешь индексы элементов за удаленным объектом.

А что собственно надо сделать?
PM MAIL ICQ   Вверх
jk1
Дата 17.6.2010, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Код

        int w;
        ...
        LinkedList list1 = new LinkedList();
        LinkedList list2 = new LinkedList();
        ...
        for (DataTuple aList1 : (Iterable<DataTuple>) list1) {
            for (Iterator<DataTuple> list2Iterator = list2.iterator(); list2Iterator.hasNext();) {
                if (aList1.getValue() - list2Iterator.next().getValue() > w) {
                    list2Iterator.remove();
                }
            }

        }


Это сообщение отредактировал(а) jk1 - 17.6.2010, 20:03


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
AbdulBcex
Дата 18.6.2010, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 6.11.2009

Репутация: нет
Всего: 1



Спасибо большое, удаление через итератор - отличный план!

Вроде функционирует.

Цитата

Чему равно purged.size()? Он совпадает с размером list2?

Извиняюсь, буду внимательней в следующий раз, purged и list2 одно и тоже.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0662 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.