использование удаления на итераторе делает код работать очень медленно? - PullRequest
0 голосов
/ 10 января 2011

У меня есть следующий код, он использует remove на итераторе, как показано:

Collection<X> getdata(){
   Collection<X> Xs = this.getXs();
    Iterator<X> iterator = Xs.iterator();
    while (iterator.hasNext()) {
        X x = iterator.next();
        if (somecondition) {
            iterator.remove();
            }
        }
    }

 return Xs;
}

Он работает несколько раз, а иногда очень долго, и мой поток зависает.Метод getXs возвращает данные из БД.

1 Ответ

3 голосов
/ 10 января 2011

Итерация и удаление не будут иметь аномального поведения, которое вы описываете сами по себе. Есть и другие, экологические условия на работе. Поскольку вы описываете взаимодействие с базой данных, велика вероятность того, что задержки и зависания связаны с тем, как ваш код взаимодействует с данными. Существует множество вариантов того, что может быть реальной проблемой, поэтому любая дополнительная информация, которую вы можете предоставить (в отличие от приведенного вами общего примера), будет полезна при устранении неполадок.

...