![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
从头开始学java
#K
这个作者很懒,什么都没留下…
展开
-
从头开始学java-hashmap的扩容原理及线程安全问题
首先hashmap是线程不安全的,路人皆知, 通俗来讲,当两个线程 a,b同时向hashmap中写入数据时,刚好这两个线程通过hash计算出的数据hashCode是相同的, 当a线程向hashmap中插入数据时,会在插入之前判断该位置有没有哈希冲突,当没有hash冲突时,插入数据, 恰好a线程刚判断好没有哈希冲突时,cpu让资源给了b线程,b线程也判定了该位置没有哈希冲突,随后将数据插入该位...原创 2020-03-22 12:37:41 · 301 阅读 · 0 评论 -
从头开始学java--List 和 Set 的区别
list 的放入是有序的,且允许元素重复 set 的放入是按照元素的hashcode值来存储的,元素不可重复,重复的元素会被覆盖掉 list 可以用for循环遍历 set 只能用迭代器遍历 list 查找元素效率高,但插入和删除效率低下,因为会引起其他元素的位置改变, list可以动态增长 set 插入和删除效率高,且位置不会改变,查找效率低下 ...原创 2020-02-17 17:05:25 · 105 阅读 · 0 评论 -
从头开始学java--HashSet是如何保证不重复的
以上是HastSet的空构造器,以及add方法 可以看出,当HashSet hashSet = new HashSet();时, 创建了 private transient HashMap<E,Object> map; 在add(E e)方法中,将e 作为参数存入HashMap的key中, 所以不会重复( HashMap 比较key是否相等是先比较 hashcode 在比...原创 2020-02-17 17:03:09 · 330 阅读 · 0 评论