java 集合 hashset的add问题 望大神解惑

hashset add的方法 value设置为PRESENT有什么用么,是不是添加一个对象就给这个
对象设置一个一模一样的PRESENT啊,这样都一样了,有什么意义么
还有 为什么hashset查询速度会快 他是如何查询对象的

1.首先hashset的底层实现是hashmap,hashset就是hashmap的keyset;
2.hashmap需要的是key和value,hashset的add只是有一个key,而value没有,所以需要用一个占用空间小的不变的PRESENT来;

为什么hashset读取快,因为hashmap内部有一个hash算法;
hashmap维护的是一个数组;
hash算法是根据你的hashCode来计算,最简单的就是取模;
这样就能找到具体的下标,也就是数组的下标,因为hashmap引入了红黑树,所以hash冲突损耗的效率就可以大大减少;

举个简单的例子;
你的hashmap里面初始化的数组大小为16;
如果我存10个数字;
如:14 22 9 7 5 3 1 8 9 19
如果有取模(求余)的话对应下标就是
14 6 9 7 5 3 1 8 9 3;
那么查询的时候可以直接根据下标取值;
其中3和19放置的位置一致,判定是否为当前值就需要用equals方法咯;

java中实现的是用的&算法,更快;

希望可以帮到你....

https://www.baidu.com/link?url=GOxL6GwXC2i2gzMpgsLySKq5XTg-kRtI865UdvcmRSsc-VdPoJjpNgukxHIkYVPF1WFLS-0xQhPBbxp0u4R8x_&wd=&eqid=fd659c4600031fbd0000000558b92673

第一个问题:忽略吧!
第二个问题:HashSet是采用哈希算法,底层用数组存储的,因此具有查询快的特点

首先add方法返回值是boolean,表明当前添加的元素是否出现了重复,里面直接调用的map.put(k,v),put方法返回的是,如果key出现了重复,则返回上次存放的的value,并且覆盖value。假如第一次存放,put返回是null,add返回是true;元素重复,则put返回一个present对象,add返回false