HashSetとTreeSetにおけるequals法の挙動の違い

1282 ワード

equals法がHashSetにおいてcontainsにおいて同一オブジェクトであるか否かを判断する役割を果たしていることを知る.

public class CartItem extends BaseObject {

	private Product product;
	private Integer amount;

	public boolean equals(Object o) {
		return this.product.getId().equals(((CartItem) o).getProduct().getId());
	}

	public int hashCode() {
		return this.product.getId().intValue();
	}

	public Double getTotal() {
		return DoubleUtil.multiply(this.product.getPrice(),
				Double.valueOf(amount));
	}

	public Product getProduct() {
		return product;
	}

	public void setProduct(Product product) {
		this.product = product;
	}

	public Integer getAmount() {
		return amount;
	}

	public void setAmount(Integer amount) {
		this.amount = amount;
	}

}

2種類のsetでequalsメソッドの発生を判断する行為は一致するべきであると考えられていた.しかし、残念ながらそうではありません.

items.contains(item)

itemsがHashSetならtrue
TreeSetならfalseです.
しかし、TreeSetでの動作にはいくつかの違いがあります.この点は注意しなければならない.
西興農厨ホテルの冬瓜は味がいいですね。