[英]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.