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工具网来了解哦。
推荐阅读: