开发者

How to remove Duplicate value from arraylist in Android [duplicate]

开发者 https://www.devze.com 2022-12-14 03:16 出处:网络
This question already has answers here: How do I remove repeated elements from ArrayList? (40 answers) Closed 6 years ago.
This question already has answers here: How do I remove repeated elements from ArrayList? (40 answers) Closed 6 years ago.
ArrayList<String> values=new ArrayList<String>();
values.add("s");
values.add("n");
values.add("a");
values.add("s");

In this Array, I want to remove re开发者_如何学JAVApeated values.


Try this...

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


Try below code,

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

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


HashSet hs = new HashSet();

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

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


I think a real neat solution for enforcing unique array lists is this one, if it's not too much code for what you're trying to achieve.

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

}


The class David Hedlund suggested can be made a lot shorter:

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

The addAll operation is modified too. The documentation states:

Returns: true if this list changed as a result of the call.

I modified the method to reflect this behaviour. There's still one problem. The documentation of the addAll() method also states:

Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's iterator.

The order might be broken by using this method. A possible workaround for this problem might be not supporting the addAll method.

0

精彩评论

暂无评论...
验证码 换一张
取 消