[英]Why Java Set contains an object to add but no Set elements are equal to this object
首先,我使用OpenJPA JPQL查詢獲得對象類Product的列表。 產品類對應於OpenJPA映射的數據庫表。 它來自Elastic Path軟件。
然后,我試圖從這些對象創建一個Set。 無法添加最后一個對象,因此包含表示該對象已在集合中。 為了理解,我遍歷Set,但是不存在等於新對象的元素。
此外,所有對象的hashCode均不同。
那是簡化的代碼:
List<Product> allProductsForPass = storeProductService.getProducts();
Set<Product> sortProducts = new TreeSet<Product>(new ProductSort());
for (Product iterProduct : allProductsForPass) {
if (sortProducts.contains(iterProduct)) {
for (Product sortProduct : sortProducts) {
log.debug("SortProductHashCode" + sortProduct.hashCode()
+ "; iterProductHashCode"
+ iterProduct.hashCode());
if (sortProduct.equals(iterProduct)) {
log.debug("SortProductFoundEqual:")
}
}
}
sortProducts.add(product);
}
TreeSet
不使用hashCode
和equals
。 它使用Comparator
的compare
方法確定兩個元素是否相同。 在你的情況Comparator
,確定如果兩個Product
要素是相同的實例SdiProductSort
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.