簡體   English   中英

為什么Java Set包含要添加的對象,但沒有Set元素與此對象相等

[英]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不使用hashCodeequals 它使用Comparatorcompare方法確定兩個元素是否相同。 在你的情況Comparator ,確定如果兩個Product要素是相同的實例SdiProductSort

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM