`
zds420
  • 浏览: 205244 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Collection之容器类的自定义对象的比较需要重写equals和hashCode

    博客分类:
  • J2SE
 
阅读更多

容器类自定义类型进行比较的时候务必重写equals方法务必要重写hashCode方法

 

 

 

package com.study;

import java.util.*;

public class OverrideEquaslCode {
	
	public static void main(String []args) {
		Collection c2= new HashSet();
		
		c2.add("Colleciton Hello1");
		c2.add("Colleciton Hello2");
		c2.add("Colleciton Hello3");
		
		c2.add(new ComputerClass("Computer1","100,200"));
		c2.add(new ComputerClass("Computer2","200,300"));
		
		System.out.println(c2);
		
		c2.remove("Colleciton Hello3");
		System.out.println(c2);	//	可以删除,基础类型继承了Object基类的equals()方法
		//下面的输出为false,因为没有自定义类型需要重写equals()方法和hashCode()方法且hashCode()比较键值对.
		System.out.println(c2.remove(new ComputerClass("Computer1","100,200")));	//重写equals方法务必要重写hashCode方法
		
		System.out.println(c2);
	}
}


class ComputerClass {
	private String brand_name;
	private String properties;
	
	public ComputerClass(String brand_name,String properties) {
		this.brand_name=brand_name;
		this.properties=properties;
	}
	
	
	public boolean equals(Object obj) {
		ComputerClass cClass = (ComputerClass)obj;//强制类型转换
		if(obj instanceof ComputerClass) {	//instaceof 比较左边对象是否是它右边的类的实例
			return  brand_name.equals(cClass.brand_name) && properties.equals(cClass.properties);
		}
		else {
			return super.equals(obj);	//否则交给父类进行比较
		}
	}
	
	 
	public int hashCode() {
		return brand_name.hashCode();
	}
	 
	public String getBrand_name() {
		return brand_name;
	}
	public void setBrand_name(String brand_name) {
		this.brand_name = brand_name;
	}
	public String getProperties() {
		return properties;
	}
	public void setProperties(String properties) {
		this.properties = properties;
	}
}

 

分享到:
评论

相关推荐

    java容器(持有对象)

    在使用这些容器时,对于自定义对象,为了正确实现equals()和hashCode()方法,以确保在Set或Map中正确识别对象,通常需要重写这两个方法。此外,处理多线程环境时,需注意线程安全问题,某些容器如ArrayList和HashMap...

    java Collection&Map

    同时,重写equals()时通常需要同时重写hashCode(),以确保对象在哈希表中的正确存储和查找。 5. **hashCode()方法**: - 返回对象的哈希码,用于哈希表(如HashMap和HashSet)的内部定位,不同对象应尽可能产生...

    Java容器学习要点1136

    当涉及到`equals()`和`hashCode()`方法时,自定义类通常需要重写这两个方法,以确保对象比较和哈希表操作符合预期。如果两个对象在逻辑上相等,它们的`equals()`方法应该返回`true`,并且相等的对象应具有相同的`...

    Java容器简要介绍

    3. 当涉及集合类的比较和操作时,重写equals()和hashCode()方法是必要的。示例代码展示了如何为自定义类正确地重写这两个方法,以实现对象间的比较和存储在哈希表中的功能。 4. List接口提供的API包括添加(add())...

    Java应用:两种Java容器类List和Set分析

    - 通过重写`hashCode()`和`equals()`方法来确保元素的唯一性。 - **TreeSet** - 使用红黑树实现,能够按自然顺序对元素进行排序。 - 支持自定义比较器,可以根据需要对元素进行排序。 - 适用于需要排序和快速...

    Java集合排序及java集合类详解(Collection、List、Map、Set).pdf

    - **覆写hashCode()**:为了确保键的唯一性,当使用自定义对象作为键时,需要重写equals()和hashCode()方法。 5. **Set** - Set接口不包含重复元素,且不保证元素顺序。 - **实现原理**:HashSet是最常见的Set...

    2020-java常见面试题

    对于自定义类,需要重写equals()以实现有意义的比较。 3. 两个对象的hashCode()相同,但equals()不一定为true:两个对象的hashCode相同仅表示它们在哈希表中可能位于同一位置,但它们可能不相等。 4. final在Java...

    涵盖了90%以上的面试题

    5. **equals 和 hashCode**:当自定义类作为 HashMap 的 key 时,必须重写 equals 和 hashCode 方法以确保正确的哈希映射和等价比较。不重写可能会导致预期之外的行为。 6. **volatile**: volatile 关键字确保变量...

    Java SE编程入门教程 java object(共9页).pptx

    - String类重写了`equals()`方法,使得两个内容相同的String对象通过`equals()`比较会返回true,即使它们是不同的实例。 4. **其他Object类的方法**: - `getClass()`: 返回对象的Class对象,提供了获取类名和...

    集合(Collection)文档

    - 示例代码展示如何为自定义类型重写`hashCode()`方法,以保证哈希值的唯一性。 通过上述内容,我们深入了解了Java集合框架中`Collection`接口及其常用实现类的关键特性与使用方法。这些知识点对于开发人员来说至关...

    去除arraylist容器中的相同的对象元素的方法

    总结来说,去除ArrayList中的重复对象需要正确地比较对象,这通常意味着需要在对象类中重写`equals()`和`hashCode()`方法。如果未这样做,`retainAll()`可能会按预期工作,特别是对于基本类型的ArrayList,但对于...

    Java服务器端开发面试.doc

    1. **`hashCode()`和`equals()`**:这两个方法在Java中用于对象的比较。`hashCode()`返回对象的哈希码,常用于哈希表(如HashMap)中快速定位对象。`equals()`检查两个对象是否相等。通常,如果重写了`equals()`,也...

    Java 最常见 200+ 面试题全解析:面试必备.docx

    对于引用类型,默认情况下 `==` 比较的是地址,而 `equals` 通常比较的是值(在类重写了 `equals` 方法的情况下)。 3. **两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?** - 不对。两个对象的 ...

    基础篇.pdf

    【基础篇.pdf】这篇文档主要涵盖了Java编程语言的基础知识,包括面向对象编程、设计原则、类和对象、数据类型、字符串、集合框架、并发、枚举、IO以及反射等内容。 面向对象是Java的核心特性,它有三个基本特征:...

    Java面试的10个问题(含参考答案).docx

    Set接口表示无序且不允许重复元素的集合,如HashSet和TreeSet,HashSet通过对象的hashCode和equals保证唯一性,而TreeSet则能自动排序。 Map接口是双列集合,存储键值对,例如Hashtable、HashMap、LinkedHashMap和...

    java知识点总结

    3. **equals和hashCode**:当使用HashMap、HashSet等散列表集合时,需要重写`equals`和`hashCode`方法,以确保集合的正确行为。 4. **散列冲突处理**:散列表可能会遇到散列冲突,这时需要通过比较元素来确定是否...

    Java面试基础题秘籍.pdf

    **Java容器类** 1. 集合框架包括Collection和Map接口,ArrayList、LinkedList、HashMap等是常用实现。 2. 线程安全的集合,如Vector、ConcurrentHashMap,使用同步机制确保并发访问的安全。 **设计模式** 设计模式...

    Java面试题,常见面试题及答案汇总.docx

    Answer: 反射是Java提供的一种机制,允许在运行时获取类和对象的信息,并进行修改。 2. 什么是Java序列化? Answer: 序列化是将对象转换为字节流的过程,以便于对象的存储或传输。 对象拷贝 1. 为什么要使用克隆?...

    2019最新Java面试题,常见面试题及答案汇总.pdf

    对于对象,equals通常需要重写来比较对象属性。 3. **hashCode和equals的关系**:如果两个对象的hashCode相同,它们不一定是相等的(equals返回true)。但根据约定,如果两个对象equals为true,它们的hashCode必须...

    Java最常见的面试题208道.docx

    3. hashcode()和equals():当两个对象equals()返回true时,hashcode()通常也应该相同,以满足哈希表(如HashMap)的等价关系。 二、容器 1. Collection和Collections的区别:Collection是所有集合类的父接口,而...

Global site tag (gtag.js) - Google Analytics