首先,我使用 OpenJPA JPQL 查询获取 Product 类对象的列表。 Product 类对应于 OpenJPA 映射的数据库表。它来自Elastic Path 软件。
然后我尝试从这些对象创建一个集合。无法添加最后一个对象,因此 contains 表示该对象已在集合中。为了理解,我迭代了 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
方法来确定两个元素是否相同。在您的情况下,确定两个 Product
元素是否相同的 Comparator
是 SdiProductSort
的实例。
关于java - 为什么Java Set包含一个要添加的对象,但没有Set元素等于该对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31325189/