如何从Android中的arraylist中删除重复值[重复]

Posted

技术标签:

【中文标题】如何从Android中的arraylist中删除重复值[重复]【英文标题】:How to remove Duplicate value from arraylist in Android [duplicate] 【发布时间】:2010-12-25 04:21:18 【问题描述】:
ArrayList<String> values=new ArrayList<String>();
values.add("s");
values.add("n");
values.add("a");
values.add("s");

在这个数组中,我想删除重复的值。

【问题讨论】:

那你为什么不使用set呢? 【参考方案1】:

我认为执行唯一数组列表的一个真正巧妙的解决方案是 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;
    


【讨论】:

@JohanWikström 这些需要在开始之前强行通过常见问题解答【参考方案2】:

David Hedlund 建议的课程可以缩短很多:

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)。请改用 Set!【参考方案3】:

试试下面的代码,

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

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

【讨论】:

自定义 bean 类呢?如何解决重复值问题? @AnandSavjani 在你的 bean 中覆盖 equals() 和 hash(),通过自定义字段进行比较 这也将保持顺序而不是哈希集 +1【参考方案4】:
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() 高效得多 请注意,添加元素的顺序将在 HashSet 中无序。【参考方案5】:

试试这个...

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

【讨论】:

你所做的只是复制最佳答案... @BrandonLaBraunCurry 公平地说,最佳答案也是从另一个帖子中复制的

以上是关于如何从Android中的arraylist中删除重复值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中删除包?

如何从 Android 中的 RemoteViews 中删除小部件?

如何从Android中的arraylist中删除重复值[重复]

如何从android的listview中删除一个项目

如何使用Android从sqlite中的表中删除所有记录?

如何从 ListView 中删除 Firebase Android 中的特定节点