如何知道什麼已被消除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例如,你可以得到重複,重複。 –