如何知道什么已被消除HashSet?Java - 如何知道已经被淘汰的HashSet?
我有一个数组int [] x = {2, 4, 4, 5};
当我隐蔽它,HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(x));
我怎么知道哪些元素已经从x
排除到set
?
如何知道什么已被消除HashSet?Java - 如何知道已经被淘汰的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);
}
}
好吧,所以'set.add'返回布尔值? –
是的,如果成功则返回'true',否则返回'false'。 –
@TilakMadichetti:你看过要检查的文档,并理解返回值吗? (堆栈溢出是*不是*自己阅读文档的替代品。) –
除了什么乔恩斯基特提到的,如果你正在寻找的东西通用的,那么这里有我的可能的方法:
实施例:
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;
}
}
我希望有更多的,我不知道的优雅和简洁的解决方案。
没有办法说第一个或第二个'4'被淘汰,因为它们是平等的。 –
没有老兄,在这种情况下,我只想“4”@PeterLawrey –
在这种情况下,你应该检查你添加他们看Jon Skeet的答案。注意:如果有三个4例如,你可以得到重复,重复。 –