Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除所有重复的列表成员_Java_Arrays_List_Arraylist_Iterator - Fatal编程技术网

Java 删除所有重复的列表成员

Java 删除所有重复的列表成员,java,arrays,list,arraylist,iterator,Java,Arrays,List,Arraylist,Iterator,我有一个充满对象的数组,如果两个对象相同,我想同时删除它们 这是我当前的方法,它返回一个 java.util.ConcurrentModificationException 此代码将删除多次出现的所有列表成员 这种方法处理奇数次的重复。因此,它不会检测并删除重复对,因为这可能会留下孤立的重复。相反,它首先计数,然后删除重复 public static void deleteDuplicates( List<Object> objectList) { HashMap<Ob

我有一个充满对象的数组,如果两个对象相同,我想同时删除它们

这是我当前的方法,它返回一个

java.util.ConcurrentModificationException


此代码将删除多次出现的所有列表成员

这种方法处理奇数次的重复。因此,它不会检测并删除重复对,因为这可能会留下孤立的重复。相反,它首先计数,然后删除重复

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指定的约定,包括:

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


但是从外观上看,如果我们真的很挑剔,你有一个,这是一个,而不是:-。编辑标题,thanksHow如果你删除一些中间的元素,你能从一个元素移动到另一个元素吗?当奇数个对象相同时,你想发生什么?@andythonas我想删除任何重复的对象,这样就包括奇数个对象
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();
        }
    }
}