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