Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > реализация AbstractSet#removeAll


Автор: Royan 28.4.2007, 13:19
Вот как это написал старина Блох

Код

    public boolean removeAll(Collection c) {
        boolean modified = false;

        if (size() > c.size()) {
            for (Iterator i = c.iterator(); i.hasNext(); )
                modified |= remove(i.next());
        } else {
            for (Iterator i = iterator(); i.hasNext(); ) {
                if(c.contains(i.next())) {
                    i.remove();
                    modified = true;
                }
            }
        }
        return modified;
    }


Скажите а почему переменная modified в одном случае меняет значение по оператору |=, а в другом ему явно присваивается значение true
Иными словами есть ли на то какие-либо основания или это из серии "просто так написал..."?

Автор: cube 28.4.2007, 17:22
Цитата(Royan @ 28.4.2007,  13:19)
Иными словами есть ли на то какие-либо основания или это из серии "просто так написал..."?

 =)

В первом случае: если хоть один был удален, то значение modified изменится на true, и дальше неизменится (здесь нужно просто проверять было ли удалено хоть одно значение)

еще можно было бы так это написать:

Код

            for (Iterator i = c.iterator(); i.hasNext(); )
                if (remove(i.next())) modified = true;


Во втором если элемент содержится в коллекции то его удаляют и изменяют modified на true =)

Автор: Royan 7.5.2007, 16:20
Логично. Хорошо придумано.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)