持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
🍊作者简介:少年不想说话,努力长大
🍊往期回顾:java基础-Set集合(一)
🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩
上讲我们说了set基础的一部分,今天我们继续看源码看看其他的方法;
add方法
首先我们看看add方法,前面我们说了一嘴,这里的add实际就是map的put方法,并以你要add的值进行hash,具体的put操作我们可以在后面的map里说,这里方便记忆就是set的add方法会把我们要塞的值当做map的key来进行存储且判断是否存在,以此达到去重的目的;
remove方法
它调用了map的remove方法,进而调用了removeNode方法,如果匹配上会将值给node结点,进而判断,最终是要返回一个null的,并在我们调用地方返回一个true;
public V remove(Object key) {
Node<K,V> e;
return (e = removeNode(hash(key), key, null, false, true)) == null ? null : e.value;
}
contains方法
contains方法调用了map的containsKey方法,该方法调用了getNode方法,这里可以理解成get我们的key,如果get到了则返回该值,如果没get到则返回null,这里的get虽然都和hash相关,但看源码我们依然可以看到equals,以此达到结果的稳定性,最终我们根据结果是否为null决定返回true或FALSE;
以及一些其他的removeall和addall方法用于删除或添加所有集合,还有containsAll-->如果此集合包含指定集合的所有元素,则返回 true。即如果指定的集合也是一个集合,如果它是这个集合的子集,则此方法返回 true,否则返回FALSE;
toArray方法
在我们集合初始化的时候预先赋值了size,然后创建个同等大小的数组,然后通过迭代器Iterator进行数组Arrays.copyOf的copy;以达到集合转数组的目的,对于他的toArray(T[] a)形式的,你如果new String[0],它会判断你给的大小,如果过小,它会重新初始化,并给对应大小的数组集合,值给null;然后继续按着toArray差不多的方法执行;🥗🥗🥗
结束结束,那就🛴🛴🛴;
如果对你有所帮助
点个赞呗