- 1.HashSet中的元素是如何保证不重复的?
HashSet底部是封装的一个hashmap,具体的步骤是 先通过hashcode比较,如果不相同则认为不是同一个数据,如果Hashcode值 相同,再通过equals()方法进行比较,
/**
equlas()方法,string 类型的 比较
instanceof :可以用来判断继承中的子类的实例是否为父类的实现,左边是子类,右边是父类
如果是自己覆写equals()方法,应该使用getClass()代替 instanceof
**/
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;
} - 2.HashMap的get()方法的工作原理?
HashMap的<K,V>在未进行显示声明时,V默认是Object;所以未声明时,需要强转.获取值的时候,通过拿到key的hash值,确定bucket位置之后,之后会调用keys.equals()方法去找到链表中正确的节点,,最终找到要找的值对象; - 3.Hashmap的工作原理?
HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。
当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。
HashMap在每个链表节点中储存键值对对象。 - 4.当两个不同的键对象的hashcode相同时会发生什么?
答:它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。
HashMap,HashSet原理解析
最新推荐文章于 2022-07-17 21:41:12 发布