首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除所有重复列表成员

删除所有重复列表成员
EN

Stack Overflow用户
提问于 2015-08-26 19:45:12
回答 1查看 46关注 0票数 0

我有一个由对象组成的数组,如果两个对象是相同的,我想删除这两个对象。

下面是我的当前方法,它将返回

java.util.ConcurrentModificationException

代码语言:javascript
复制
public void deleteDuplicates(ArrayList<Object> objectArrayList){

    Iterator<Object> objectIterator = objectArrayList.iterator();
    Iterator<Object> objectIterator2 = objectArrayList.iterator();

    while(objectIterator.hasNext()){
        Object object = objectIterator.next();

        while(objectIterator2.hasNext()){
            if(object.equals(objectIterator2.next())){
                objectIterator2.remove();
                objectIterator.remove();
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-08-26 20:14:00

此代码将删除不止一次出现的所有列表成员。

这种方法处理奇数重复。因此,它不检测和删除重复对,因为这可能留下一个孤儿重复。相反,它首先计数,然后删除重复。

代码语言:javascript
复制
public static void deleteDuplicates( List<Object> objectList) {
    HashMap<Object,Integer> counts = new HashMap<>();
    for ( Object o : objectList ) {
        int oldCount = counts.containsKey( o )
            ? counts.get( o ).intValue()
            : 0;
        counts.put( o, oldCount + 1 );
    }

    for ( Iterator<Object> it = objectList.iterator(); it.hasNext(); ) {
        Object o = it.next();
        if ( 1 < counts.get( o )) {
            it.remove();
        }
    }
}

请注意,此方法要求列表成员的hashCode()方法满足Object.hashCode()指定的约定,包括:

如果两个对象根据equals(Object)方法相等,那么对两个对象中的每个对象调用hashCode方法都必须产生相同的整数结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32235419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档