Java - 如何知道HashSet淘汰了什么?
Java -How to know what has been eliminated HashSet?
如何知道HashSet淘汰了什么?
我有一个数组int [] x = {2, 4, 4, 5};
当我隐藏它时,HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(x));
我如何知道哪些元素已从 x
中删除到 set
中?
您可以使用:
而不是使用该构造函数
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);
}
}
除了 Jon Skeet 提到的之外,如果您正在寻找通用的东西,那么这里是我可能的方法:
- 找到数组中的重复项,那些可以认为是从HashSet中删除的值。不过,这实际上与 HashSet 没有任何关系。
示例:
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
class 并重写 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;
}
}
我希望有更多我不知道的更优雅和简洁的解决方案。
如何知道HashSet淘汰了什么?
我有一个数组int [] x = {2, 4, 4, 5};
当我隐藏它时,HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(x));
我如何知道哪些元素已从 x
中删除到 set
中?
您可以使用:
而不是使用该构造函数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);
}
}
除了 Jon Skeet 提到的之外,如果您正在寻找通用的东西,那么这里是我可能的方法:
- 找到数组中的重复项,那些可以认为是从HashSet中删除的值。不过,这实际上与 HashSet 没有任何关系。
示例:
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
class 并重写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;
}
}
我希望有更多我不知道的更优雅和简洁的解决方案。