`
wutao8818
  • 浏览: 618120 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

equals方法在HashSet与TreeSet中的行为差异

 
阅读更多
我们知道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中的行为会有一些差异。这点要注意。

西兴农厨饭店冬瓜味道不错!
分享到:
评论

相关推荐

    HashSet和TreeSet.doc

    HashSet 和 TreeSet 是 Java 中两种常用的 Set 集合实现,它们都继承自 Set 接口,但实现方式和特性上存在显著差异。 首先,HashSet 是基于哈希表(HashMap 实例)来存储元素的,因此它提供了快速的插入、删除和...

    详解Java中HashSet和TreeSet的区别

    当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值来决定该对象在 HashSet 中的存储位置。简单地说,HashSet 集合判断两个元素相等的...

    HashSet,TreeSet和LinkedHashSet的区别1

    在Java编程语言中,集合框架是处理数据的...在使用这些集合类时,确保正确地实现了equals()、hashCode()(对于HashSet和LinkedHashSet)以及Comparable或Comparator(对于TreeSet)方法,是保证集合行为正确性的关键。

    day18-集合-中(HashSet&TreeSet&比较器).zip

    在Java编程语言中,集合框架是处理对象组的重要工具,其中`HashSet`和`TreeSet`是两种常见的接口实现类,分别提供了不同的功能和性能特性。本教程将深入探讨这两个集合类以及它们与比较器(Comparator)的关系。 ...

    treemap treeset hashset hashmap 简要介绍

    在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。这些集合类各自有着独特的特性和应用场景,下面将对它们进行详细介绍。...

    set接口经常用的hashCode和equals方法详解

    在这个例子中,`equals`方法根据`name`和`age`属性来判断两个`Person`对象是否相等,而`hashCode`方法也综合考虑了这两个属性,以确保`equals`方法返回`true`的对象具有相同的哈希码。 #### 七、总结 在Java中,...

    java 中HashMap、HashSet、TreeMap、TreeSet判断元素相同的几种方法比较

    在Java编程中,HashMap、HashSet、TreeMap和TreeSet是四种常见的集合类,它们各自有特定的用途和内部实现机制。这些数据结构用于存储和管理数据,其中HashMap和HashSet是基于哈希表实现的,而TreeMap和TreeSet则是...

    JavaSE专题-Set集合.doc

    在使用HashSet时,需要注意的是,需要重写hashcode和equals方法,以确保元素的唯一性。如果hashcode返回的结果都一样,可以吗?答案是不能,因为那样的话,HashSet将无法保证元素的唯一性。 TreeSet TreeSet是Set...

    集合的概念及应用和HashSet保证数据不重复的原理

    同时,源码分析也能帮助我们理解HashMap的扩容机制,以及为什么即使两个对象的hashCode相同,它们仍然可以在HashSet中区分(因为equals()方法的正确实现)。 工具在学习和使用集合框架时也扮演着重要角色。例如,...

    对于java集合类的一个简单介绍

    HashSet存储的对象,需要重写hashCode()和equals()两个方法。 Iterator迭代器 Iterator是一种设计模式,提供了遍历集合的能力。Iterator提供了hasNext()和next()两个方法,分别用于检查是否有可迭代的元素和返回...

    Java数据结构--13.Java8数据结构TreeSet.pdf

    在Java集合框架中,TreeSet是一个重要的数据结构,它是Set接口的实现类之一,与HashSet和LinkedHashSet不同,TreeSet具有排序功能,这是因为其不仅继承自AbstractSet,还实现了SortedSet和NavigableSet接口。...

    超详细_解释java_equals()与hashCode().pdf

    `equals()`方法用于判断两个对象是否相等,而`hashCode()`方法则与对象在哈希表中的存储位置相关。 1. `equals()`方法: - 默认情况下,`equals()`方法会比较两个对象的引用是否指向同一块内存空间,即检查它们...

    Java—Set集合详解(HashSet/LinkedHashSet/TreeSet/EnumSet)

    Set集合在Java编程中扮演着重要的角色,它是一种不允许元素重复的...在处理自定义对象时,确保正确地重写`equals()`和`hashCode()`方法至关重要,因为这是判断对象是否相等的标准,特别是在使用HashSet和TreeSet时。

    java中set接口使用方法详解

    当向HashSet中添加元素时,元素的`hashCode()`和`equals()`方法会被调用来判断是否已经存在相同元素。如果两个对象的`hashCode()`相等并且`equals()`返回true,那么它们被视为同一个对象,HashSet将不会存储重复的...

    Set实现类1

    在实际开发中,选择HashSet还是TreeSet取决于需求:HashSet适合快速查找且对元素顺序无要求的情况;而TreeSet适用于需要排序或者导航查找的场景。正确实现元素类的equals()和hashCode()方法对于保证HashSet的唯一性...

    Java面试题-基础+集合原理.pdf

    Java集合原理涵盖了Java中各种集合类的使用和实现,包括ArrayList、LinkedList、HashSet、TreeSet等。这些集合类提供了不同的数据结构和运算方式,以便于开发者更方便地处理数据。 本资源涵盖了Java面试题的基础...

    Java习题六.docx

    Java习题六 本资源摘要信息涵盖了 Java 中的集合框架,包括 TreeSet、List、...在将键值对存储到 Map 中时,可以使用 put() 方法,然后使用 keySet() 方法获取键的集合,最后使用 Iterator 迭代键的集合来打印键值对。

    hhtc大一期末测试题Java分析题

    在这个例子中,equals()方法只检查两个学生的id是否相等,而hashCode()方法则基于id的哈希值来确定对象的位置。这样,当我们使用HashSet或TreeSet存储Student对象时,如果有两个学生具有相同的学号,Set会识别它们为...

    北大青鸟Java教程

    - Set接口:不允许重复元素,`add()`, `equals()`, `hashCode()`有特殊限制,例如HashSet和TreeSet。 - SortedSet接口:在Set的基础上增加排序功能,元素按升序排列,可能抛出ClassCastException和...

Global site tag (gtag.js) - Google Analytics