`
wutao8818
  • 浏览: 606463 次
  • 性别: 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

    Set是java中一个不包含重复元素的collection。更正式地说,set 不包含满足e1....HashSet与TreeSet都是基于Set接口的实现类。其中TreeSet是Set的子接口SortedSet的实现类。Set接口及其子接口、实现类的结构如下所示。

    HashSet,TreeSet和LinkedHashSet的区别1

    简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相 等注意,如果要把一个对

    实验05 Java集合.doc

    注意:因为Person类是自定义类,需要重写hashCode()方法和equals()方法,并规定只有姓名和身份证号都相等,则对象相等。 其中计算哈希码的算法:(31 + ((name == null) ? 0 : name.hashCode()))*31 + id (注:...

    Java期末复习-类集框架

    List接口、ArrayList类、Vector类、栈操作类Stack、链表操作类LinkList、队列操作接口Queue、Set接口、HashSet类、TreeSet类、SortedSet接口 双值操作接口Map(key->value)及其子接口、子类: SortedMap接口、HashMap...

    程序员需要经常刷题吗-simple-java-zh-CN:SimpleJava是Java常见问题的集合。中文翻译

    equals() 之间的契约 Java是按引用还是按值传递对象? 迭代与递归 ##3。 类和接口 什么是实例初始化器? 字段不能被覆盖? 继承与组合 如何使用 Java 枚举? 有多少种内部类? 什么是内部接口? 子类和超类的构造...

    java8集合源码分析-CollectionDemo:自己复习集合框架时候的例子

    java8 集合源码分析 java基础复习 [TOC] 一、集合 1.Iterator ...hashCode方法相同,判断equals方法 ---LinkedHashSet: 有序,是HashSet的子类 2.TreeSet: 底层是二叉树,可对元素进行排序,默认是自然顺序

    javaSE代码实例

    14.6.3 equals与hashCode方法重写规定的作用 288 14.6.4 LinkedHashSet类的使用 291 14.6.5 SortedSet接口与TreeSet类 292 14.6.6 自定义满足Sorted集合的类 293 14.6.7 定制SortedSet的排序规则 296 14.6...

    疯狂JAVA讲义

    8.4.4 泛型方法与方法重载 309 8.5 擦除和转换 310 8.6 泛型与数组 311 8.7 本章小结 313 第9章 与运行环境交互 314 9.1 与用户互动 315 9.1.1 运行Java程序的参数 315 9.1.2 使用Scanner获取键盘输入 316 ...

    21天学通Java-由浅入深

    162 8.5.8 重写equals方法 163 8.6 final与继承的关系 164 8.7 abstract与继承的关系 165 8.8 什么是多态 166 8.9 什么是枚举类 168 8.10 什么是反射机制 169 8.11 什么是泛型 170 8.12 综合练习 172 8.13 小结 172 ...

    Java JDK实例宝典

    6 方法和变量在继承时的覆盖与隐藏 2. 7 排序类 2. 8 Singleton单例模式 2. 9 Factory工厂模式 2. 10 Adapter适配器模式 第3章 数字 3. 1 数字与数字封装类 3. 2 格式化数字 3. 3 ...

    达内 coreJava 习题答案

    其中a为1至9之中的一个数,项数也要可以指定。 import java.util.Scanner; class Multinomial{ public static void main(String[] args){ int a; //定义输入的 a int howMany; //定义最后的一项有多少个数字 ...

    Java容器.xmind

    底层哈希表,基于hashCode的equals的比较方式,线程不安全,存取速度快。 SortedSet 标记: interface TreeSet 标记: class 实现comparable接口,元素是以二叉树的形式存放的。线程不安全 CopyOnWriteArraySet 标记:...

Global site tag (gtag.js) - Google Analytics