继承Set接口类重载equals方法和hashCode方法

本文探讨了在Set接口实现类中重载equals方法和hashCode方法的重要性。未重载时,即使值相同但对象地址不同,Set会认为是不同元素,导致结果为3。而重载后,通过比较值来判断元素是否相等,结果变为1。这种方法在处理数据相等性判断时更为准确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所用Set定义的
         当存的数据相同时,(不管地址是否相同)就认为存的是一个数据

public void test0() {
			Set c = new HashSet();
			String t1 = "11111";
			String t2 = "11111";
			String t3 = new String("11111");
	    	c.add(t1);
	    	c.add(t2);
	    	c.add(t3);
	    	System.out.println(c.size());
		}

结果为:1

调用其他类来输入值时,计算机不能判断值是否相等
         但是可以在调用的类中重载equals方法和hashCode方法(来进行判断值是否相等)

@Test
	    public void test1() {
	    	Set c = new HashSet();
	    	c.add(new Student("行",20));
	    	c.add(new Student("行",20));
	    	c.add(new Student("行",20));
	    	System.out.println(c.size());
	    }
	    

没重载equals方法和hashCode方法时结果为3,重载equals方法和hashCode方法后结果为1

public class Student {
	
		public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
		private String name = null;
		private int age;
		
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}

		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			result = prime * result + age;
			result = prime * result + ((name == null) ? 0 : name.hashCode());
			return result;
		}
		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Student other = (Student) obj;
			if (age != other.age)
				return false;
			if (name == null) {
				if (other.name != null)
					return false;
			} else if (!name.equals(other.name))
				return false;
			return true;
		}
}

 

List定义的类,即输入的个数

public void test6() {
			List c = new LinkedList();
			String t1 = "11111";
			String t2 = "11111";
			String t3 = new String("11111");
	    	c.add(t1);
	    	c.add(t2);
	    	c.add(t3);
	    	System.out.println(c.size());
		}

结果为:3

public void test8() {
	    	List c = new LinkedList();
	    	c.add(new Student("行",20));
	    	c.add(new Student("行",20));
	    	c.add(new Student("行",20));
	    	System.out.println(c.size());
	    }

结果为:3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值