如何知道已删除的HashSet?
我有一个数组int [] x = {2, 4, 4, 5};
当我转换它时,HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(x));
我如何知道从x
到set
消除了哪些元素?
答案 0 :(得分:5)
您可以使用:
,而不是使用该构造函数Set<Integer> set = new HashSet<>();
for (int value : x) {
if (!set.add(value)) {
// Or whatever you want to do
System.out.println("Detected a duplicate... " + value);
}
}
答案 1 :(得分:1)
除了Jon Skeet所提到的,如果你正在寻找通用的东西,那么这是我可能的方法:
示例:
Arrays.sort( myArray);
for ( int i = 1; i < myArray.length; ++i ) {
if ( 0 == myComparator.compare( myArray[i - 1], myArray[i] )) {
// Found a duplicate. Store/print it
}
}
HashSet
类并覆盖add(Object obj)
方法,以便当对象已存在于HashSet中时,它将被添加到已删除项目的列表中。当然,这意味着您必须在HashSet
的任何地方使用此自定义HashSet
。 示例:
public MyHashSet extends HashSet<E> {
List<E> removedAsDuplicateItems = new ArrayList<>();
@Override
public boolean add(E e) {
boolean isNewItem = map.put(e, PRESENT)==null;
if(!isNewItem) removedAsDuplicateItems.add(e);
return isNewItek;
}
public List<E> removedAsDuplicateItems() {
return removedAsDuplicateItems;
}
}
我希望有更多优雅和简洁的解决方案,我不知道。