我有一个由对象组成的数组,如果两个对象是相同的,我想删除这两个对象。
下面是我的当前方法,它将返回
java.util.ConcurrentModificationException
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();
}
}
}
}发布于 2015-08-26 20:14:00
此代码将删除不止一次出现的所有列表成员。
这种方法处理奇数重复。因此,它不检测和删除重复对,因为这可能留下一个孤儿重复。相反,它首先计数,然后删除重复。
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方法都必须产生相同的整数结果。
https://stackoverflow.com/questions/32235419
复制相似问题