 
					
						网站救助计划
						
						
						
				  1.为阅读体验,本站无任何广告,也无任何盈利方法,站长一直在用爱发电,现濒临倒闭,希望有能力的同学能帮忙分担服务器成本
2.捐助10元及以上同学,可添加站长微信lurenzhang888,备注捐助,网站倒闭后可联系站长领取本站pdf内容
3.若网站能存活下来,后续将会持续更新内容
这里面涉及到了HasCode()和equals()两个方法。
- equals()
先看下String类中重写的equals方法。
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }从源码中可以看到:
- equals方法首先比较的是内存地址,如果内存地址相同,直接返回- true;如果内存地址不同,再比较对象的类型,类型不同直接返回- false;类型相同,再比较值是否相同;值相同返回- true,值不同返回- false。总结一下,- equals会比较内存地址、对象类型、以及值,内存地址相同,- equals一定返回- true;对象类型和值相同,- equals方法一定返回- true。
- 如果没有重写equals方法,那么equals和==的作用相同,比较的是对象的地址值。
- hashCode
- hashCode方法返回对象的散列码,返回值是- int类型的散列码。散列码的作用是确定该对象在哈希表中的索引位置。关于- hashCode有一些约定:- 两个对象相等,则hashCode一定相同。
- 两个对象有相同的hashCode值,它们不一定相等。
- hashCode()方法默认是对堆上的对象产生独特值,如果没有重写- hashCode()方法,则该类的两个对象的- hashCode值肯定不同
 
- 两个对象相等,则
介绍完equals()方法和hashCode()方法,继续说下HashSet是如何检查重复的。
HashSet的特点是存储元素时无序且唯一,在向HashSet中添加对象时,首先会计算对象的HashCode值来确定对象的存储位置,如果该位置没有其他对象,直接将该对象添加到该位置;如果该存储位置有存储其他对象(新添加的对象和该存储位置的对象的HashCode值相同),调用equals方法判断两个对象是否相同,如果相同,则添加对象失败,如果不相同,则会将该对象重新散列到其他位置。
本站链接:https://www.mianshi.online,如需勘误或投稿,请联系微信:lurenzhang888
点击面试手册,获取本站面试手册PDF完整版