ArrayList<String> values=new ArrayList<String>();
values.add("s");
values.add("n");
values.add("a");
values.add("s");
В этом массиве я хочу удалить повторяющиеся значения.Как удалить Дублирующее значение из arraylist в Android
ArrayList<String> values=new ArrayList<String>();
values.add("s");
values.add("n");
values.add("a");
values.add("s");
В этом массиве я хочу удалить повторяющиеся значения.Как удалить Дублирующее значение из arraylist в Android
Я думаю, что настоящее опрятное решение для обеспечения уникальных списков массивов - this one, если это не слишком много кода для того, чего вы пытаетесь достичь.
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;
}
}
Класс Дэвид Хедлунд предположил, может быть намного короче:
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
изменяется тоже. В documentation указывается:
Возвраты: true, если этот список изменился в результате вызова.
Я изменил метод, чтобы отразить это поведение. Еще одна проблема. В документации метода addAll() также указывается:
Добавляет все элементы указанной коллекции в конец этого списка в том порядке, в котором они возвращаются итератором указанной коллекции.
Порядок может быть разорван при использовании этого метода. Возможным обходным решением этой проблемы может быть не поддержка метода addAll
.
Это добавляет элемент O (n). Вместо этого используйте набор! –
Try ниже код,
ArrayList<String> values=new ArrayList<String>();<br>
String newValue;<br>
// repeated additions:<br>
if (!values.contains(newValue)) {values.add(newValue);}
короткий и умный ответ +1 – XtreemDeveloper
что касается пользовательского bean-класса? Как решить проблему с дублирующимся значением? –
@AnandSavjani переопределяет equals() и hash() в вашем bean-компоненте, сравнивает пользовательское поле –
HashSet hs = new HashSet();
hs.addAll(demoArrayList); // demoArrayList= name of arrayList from which u want to remove duplicates
demoArrayList.clear();
demoArrayList.addAll(hs);
Многое более эффективно, чем ArrayList.contains() – gor
Попробуйте это ...
ArrayList<String> values=new ArrayList<String>();
HashSet<String> hashSet = new HashSet<String>();
hashSet.addAll(values);
values.clear();
values.addAll(hashSet);
Счастливый кодирования ...
совершенная точка выстрела, очень умный ответ. –
Все, что вы сделали, это скопировать главный ответ ... –
@BrandonLaBraunЧтобы быть справедливыми, верхний ответ скопировал его также, из другого сообщения –
Почему бы вам не использовать [набор] (HTTP://java.sun.com/javase/6/docs/api/java/util/Set.html), то? – Cshah