为什么Java集合包含要添加的对象,但集合元素不等于此对象

为什么Java集合包含要添加的对象,但集合元素不等于此对象,java,collections,openjpa,Java,Collections,Openjpa,首先,我使用OpenJPA JPQL查询获得对象类产品的列表。类产品对应于OpenJPA映射的数据库表。它来自弹性路径软件 然后我尝试从这些对象创建一个集合。无法添加最后一个对象,因此contains表示此对象已在集合中。为了理解,我迭代了集合,但没有一个元素等于新对象 此外,所有对象的哈希代码都不同 这是简化代码: List<Product> allProductsForPass = storeProductService.getProducts(); Set<

首先,我使用OpenJPA JPQL查询获得对象类产品的列表。类产品对应于OpenJPA映射的数据库表。它来自弹性路径软件

然后我尝试从这些对象创建一个集合。无法添加最后一个对象,因此contains表示此对象已在集合中。为了理解,我迭代了集合,但没有一个元素等于新对象

此外,所有对象的哈希代码都不同

这是简化代码:

    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);
    }
List allProductsForPass=storeProductService.getProducts();
设置sortProducts=newtreeset(newproductsort());
对于(产品iterProduct:allProductsForPass){
if(sortProducts.contains(iterProduct)){
for(产品sortProduct:sortProducts){
log.debug(“SortProductHashCode”+sortProduct.hashCode()
+“iterProductHashCode”
+iterProduct.hashCode());
if(sortProduct.equals(iterProduct)){
调试(“SortProductFoundEqual:”)
}
}
}
sortProducts.add(产品);
}

TreeSet
不使用
hashCode
equals
。它使用
比较器
比较
方法来确定两个元素是否相同。在您的情况下,确定两个
产品
元素是否相同的
比较器
SdiProductSort
的一个实例

树集
不使用
哈希码
等于
。它使用
比较器
比较
方法来确定两个元素是否相同。在您的情况下,确定两个
产品
元素是否相同的
比较器
SdiProductSort
的一个实例

树集
不使用
哈希码
等于
。它使用
比较器
比较
方法来确定两个元素是否相同。在您的情况下,确定两个
产品
元素是否相同的
比较器
SdiProductSort
的一个实例

树集
不使用
哈希码
等于
。它使用
比较器
比较
方法来确定两个元素是否相同。在您的情况下,确定两个
产品
元素是否相同的
比较器
SdiProductSort

的一个实例,那么您的
equals
呢?请发布SdiProductSort的代码。我们也需要产品的代码。您的
equals
呢?请发布SdiProductSort的代码。我们还需要产品的代码。您的
equals
呢?请发布SdiProductSort的代码。我们也需要产品的代码。您的
equals
呢?请发布SdiProductSort的代码。我们还需要产品的代码。@GriffeyDog这很有趣,因为我搜索了相关的代码,它最终调用,使用
compare
,从不调用equals。是的,javadoc本身有点冲突+1.@GriffeyDog这很有趣,因为我搜索了相关的代码,它最终调用了,它使用
compare
,从不调用equals。是的,javadoc本身有点冲突+1.@GriffeyDog这很有趣,因为我搜索了相关的代码,它最终调用了,它使用
compare
,从不调用equals。是的,javadoc本身有点冲突+1.@GriffeyDog这很有趣,因为我搜索了相关的代码,它最终调用了,它使用
compare
,从不调用equals。是的,javadoc本身有点冲突+1.