为什么 Java Set 包含要添加的对象但没有 Set 元素等于此对象

Why Java Set contains an object to add but no Set elements are equal to this object

首先,我使用 OpenJPA JPQL 查询获取对象列表 class 产品。 Class 产品对应于 OpenJPA 映射的数据库 table。来自Elastic Path软件。

然后我尝试从这些对象创建一个集合。无法添加最后一个对象,因此包含表示该对象已经在集合中。为了便于理解,我遍历了 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 不使用 hashCodeequals。它使用 Comparatorcompare 方法来确定两个元素是否相同。在您的情况下,确定两个 Product 元素是否相同的 ComparatorSdiProductSort.

的一个实例