Как удалить Дублирующееся значение из arraylist в Android [дубликат]

Существует различие, да.

XML, который придерживается стандарт XML , считают хорошо сформированным, в то время как xml, который придерживается DTD, считают допустимым.

32
задан Tofeeq Ahmad 24 January 2013 в 08:43
поделиться

2 ответа

Класс, который предложил Дэвид Хедлунд, можно сделать намного короче:

public class UniqueArrayList extends ArrayList {
    /**
     * Only add the object if there is not
     * another copy of it in the list
     */
    public boolean add(T obj) {
        if(this.contains(obj))
           return false;
        return super.add(obj);
    }

    public boolean addAll(Collection c) {
        boolean result = false;
        for (T t : c) {
            if (add(t)) {
                result = true;
            }
        }
        return result;
    }
}

Операция addAll также изменена. В документации указано:

Возвращает: истина, если этот список изменился в результате вызова.

Я изменил метод, чтобы отразить это поведение. Есть еще одна проблема. В документации метода addAll () также говорится:

Добавляет все элементы в указанной коллекции в конец этого списка в том порядке, в котором они возвращаются итератором указанной коллекции.

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

1
ответ дан 27 November 2019 в 19:58
поделиться

Я думаю, что настоящее изящное решение для принудительного применения списков уникальных массивов - это этот , если это не слишком много кода для того, чего вы пытаетесь достичь.

public class UniqueOverridingList extends ArrayList {

    public enum LAST_RESULT {
        ADD, OVERRIDE, NOTHING;
    }

    private LAST_RESULT lastResult;

    public boolean add(T obj) {
        for (int i = 0; i < size(); i++) {
            if (obj.equals(get(i))) {
                set(i, obj);
                lastResult = LAST_RESULT.OVERRIDE;
                return true;
            }
        }
        boolean b = super.add(obj);
        if (b) {
            lastResult = LAST_RESULT.ADD;
        } else {
            lastResult = LAST_RESULT.NOTHING;
        }
        return b;
    }

    public boolean addAll(Collection c) {
        boolean result = true;
        for (T t : c) {
            if (!add(t)) {
                result = false;
            }
        }
        return result;
    }

    public LAST_RESULT getLastResult() {
        return lastResult;
    }

}
2
ответ дан 27 November 2019 в 19:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: