JDK1.7或者更老的版本中在多线程情况下是会存在死循环问题,究其原因是put过程中的resize方法在调用transfer方法的时候导致的死锁。这次我们来看看到底是哪里出了问题!
JDK1.7或者更老的版本中在多线程情况下是会存在死循环问题,究其原因是put过程中的resize方法在调用transfer方法的时候导致的死锁。这次我们来看看到底是哪里出了问题!
很多命令之所以重要,是因为用它们会大幅提高工作效率。所以,熟悉它们是我们必须要做的一件事情。下面着重提取了find、grep、管道、wc、awk以及sed等几个命令来看看如何使用。
HashSet 和 LinkedHashSet 的关系类似于 HashMap 和 LinkedHashMap 的关系,即后者维护双向链表,实现迭代顺序可为插入顺序或是访问顺序。所以也就轻松加愉快快速了解一下即可。
Hashtable 是个过时的集合类,不建议在新代码中使用,不需要线程安全的场合可以用 HashMap 替换,需要线程安全的场合可以用 ConcurrentHashMap 替换。但这并不是我们不去了解它的理由。最起码 Hashtable 和 HashMap 的面试题在面试中经常被问到。
本篇单独讲一下HashMap和LinkedHashMap遍历方式。
大多数情况下,只要不涉及线程安全问题, Map 基本都可以使用 HashMap ,不过 HashMap 有一个问题,就是迭代 HashMap 的顺序并不是 HashMap 放置的顺序,也就是无序。 HashMap 的这一缺点往往会带来困扰,因为有些场景,我们期待一个有序的 Map。
HashSet 是一个不允许存储重复元素的集合,它是基于 HashMap 实现的, HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成。所以只要理解了 HashMap,HashSet 就水到渠成了。
HashMap基本是面试必问的点,因为这个数据结构用的太频繁了,jdk1.8中的优化也是比较巧妙。有必要去深入探讨一下。但是涉及的内容比较多,这里只先探讨jdk8中HashMap的实现,至于jdk7中HashMap的死循环问题、红黑树的原理等都不会在本篇文章扩展到。其他的文章将会再去探讨整理。
hashcode涉及到集合HashMap等集合,此篇侧重于了解hashcode和equals方法的作用的原理。有助于下一篇HashMap的理解。
CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add、set 等等)都是通过对底层数组进行一次新的复制来实现的。