hashset相信很多人都很了解,但是也有的人表示,自己对于hashset的底层实现原理不是很清楚,那么下面就通过以下的文章内容来了解以下吧。
hashset底层使用了哈希表来支持的,它有一个很显著的特点就是存储快,再向hashset添加元素时,hashset会先调用素的hashCode方法得到元素的哈希值,之后再通过元素的哈希值经过移位等运算,就能够算出这个元素在哈希表当中的存储位置。
假如,算出的元素存储的位置,当前是没有任何元素存储,则,这个元素能够直接存储在该位置上;
假如,算出的元素的存储位置,当前已经存在有其他的元素了,则,会调用这个元素的equals方法和这个位置的元素再比较一次,假如,equals方法返回的是true,则,这个位置上元素视为重复元素,不允许添加,假如,返回的是false,那么就允许添加;class Person
{
String name;
int age;
private void Peron()
{
// TODO Auto-generated method stub
}
public Person(String name, int age)
{
super();
this.name = name;
this.age = age;
}
@Override
public int hashCode()
{
System.out.println("--------");
// TODO Auto-generated method stub
return this.age;
}
@Override
public boolean equals(Object obj)
{
System.out.println("---****----");
Person p = (Person) obj;
return this.age == p.age;
}
@Override
public String toString()
{
// TODO Auto-generated method stub
return "{姓名:" + name + "年龄:" + age + "}";
}
}
public class Demo2
{
public static void main(String[] args)
{
HashSet set = new HashSet();
set.add(new Person("yy", 18));
set.add(new Person("xx", 19));
set.add(new Person("zz", 20));
set.add(new Person("jj", 25));
System.out.println("添加元素成功了嗎?" + set.add(new Person("zhangsan", 18)));
System.out.println("集合的元素:" + set);
}
}
hashset的底层实现原理你都了解了吗?更多hashset常见问题,可以继续的通过奇Q工具网来了解哦。
推荐阅读: