hashset底层实现原理详解,原理介绍

KLQ 2020-06-29 16:51:27 java常见问答 5428

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工具网来了解哦。

推荐阅读:

hashset和treeset区别是什么?有什么区别?

hashmap的实现原理和hashset的实现原理是什么?

java中HashSet子类依靠什么区分重复元素?