我嘗試過使用Guava中的Sets.intersection方法()來比較字符串類型的集合。它工作正常。我想知道我應該使用什麼方法來比較兩個對象?我已經重寫了compareTo()方法,但Sets.intersection將相似的對象視爲不同的對象。你能建議嗎?我們可以重寫番石榴的交集方法來比較對象嗎?
謝謝。
我嘗試過使用Guava中的Sets.intersection方法()來比較字符串類型的集合。它工作正常。我想知道我應該使用什麼方法來比較兩個對象?我已經重寫了compareTo()方法,但Sets.intersection將相似的對象視爲不同的對象。你能建議嗎?我們可以重寫番石榴的交集方法來比較對象嗎?
謝謝。
鑑於Sets.intersection()
實現:
public static <E> SetView<E> intersection(final Set<E> set1, final Set<?> set2) {
//...
return new SetView<E>() {
//...
@Override public boolean contains(Object object) {
return set1.contains(object) && set2.contains(object);
}
@Override public boolean containsAll(Collection<?> collection) {
return set1.containsAll(collection)
&& set2.containsAll(collection);
}
};
}
我說你必須執行需要什麼方法,使併爲Set
小號containsAll()
工作,你傳遞,因爲所有的工作都委託給您在通過Set
秒。
所以對於HashSet
s表示將equals()
和hashCode()
,併爲TreeSet
s表示將compareTo()
如果實現Comparable
或compare()
如果您使用Comparator
(可能還想覆蓋equals()
和hashCode()
以使事物在Map
之外保持一致)。
'compareTo()'/'compare()'應該是'TreeSet'用來確定相等的所有東西。也就是說,'compareTo()'_should_(但並非嚴格要求)與'equals'一致,如果兩個元素比較爲'0',它們應該總是等於'equals()'。這意味着也正確執行'hashCode()'。 – ColinD
@ColinD更新了我的答案,將其考慮在內。謝謝! – awksp