Подтвердить что ты не робот

Как удалить Duplicate value из arraylist в Android

ArrayList<String> values=new ArrayList<String>();
values.add("s");
values.add("n");
values.add("a");
values.add("s");

В этом массиве я хочу удалить повторяющиеся значения.

4b9b3361

Ответ 1

Попробуйте это...

    ArrayList<String> values=new ArrayList<String>();
    HashSet<String> hashSet = new HashSet<String>();
    hashSet.addAll(values);
    values.clear();
    values.addAll(hashSet);

Счастливое кодирование...

Ответ 2

Попробуйте ввести код,

ArrayList<String> values=new ArrayList<String>();<br>
String newValue;<br>

// repeated additions:<br>
if (!values.contains(newValue)) {values.add(newValue);}

Ответ 3

            HashSet hs = new HashSet();

            hs.addAll(demoArrayList); // demoArrayList= name of arrayList from which u want to remove duplicates 

            demoArrayList.clear();
            demoArrayList.addAll(hs);

Ответ 4

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

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;
    }

}

Ответ 5

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

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 также изменяется. В документации говорится:

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

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

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

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