![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
必知必会
文章平均质量分 82
timo_xin
codeing
展开
-
必知必会--Optional那点事
A container object which may or may not contain a non-null valueOptional作为JDK1.8引入的一个新特性,官方介绍Optional是一个判断对象是否为空的容器。虽然Optional的代码只有350行(还包括大量的注释),但是功能却不简单,算得上小巧而又精悍。在Optional出现之前我们是如何判断为空呢。if(null == object){...}相信这段代码大家再熟悉不过了。假设现在有一个需求,利用下面给出的jso原创 2021-07-25 19:47:13 · 430 阅读 · 0 评论 -
必知必会--HashMap容量细节
絮叨HashMap作为Java中最常用的数据结构之一,在工作中使用HashMap的频率和你遇见NullPointException一样多,在面试中被问到的概率和问你名字的概率一样大。既然工作,面试经常遇到,我们有必要熟悉HashMap的每一个细节。作为最常用的数据结构之一,我们都知道HashMap的容量为2次幂。当被问到为什么是2次幂时,大家应该都能回答出来,是为了均匀分散到数组中。但是2次幂...原创 2019-12-13 19:43:11 · 533 阅读 · 3 评论 -
必知必会--ConcurrentHashMap锁分段原理
前言HashMap是线程不安全的类,JDK1.8之前多线程的情况下,如果多次put操作会导致死循环,尽管JDK1.8对HashMap进行了优化,但是HashMap并不是为了线程安全而设计的类,因此多线程下我们应该尽量避免使用HashMap。Hashtable是线程安全的类,但是当Hashtable进行put操作时会将整个Hashtable对象锁起来,只允许一个线程向Hashtable中pu...原创 2019-10-12 12:21:31 · 3029 阅读 · 1 评论 -
必知必会--HashMap扩容机制
前言JDK1.8对HashMap进行的较大的改动,其中对HashMap的扩容机制进行了优化。在JDK1.8前,在多线程的情况下,使用HashMap进行put操作会造成死循环。这是因为多次put操作会引发HashMap的扩容机制,HashMap的扩容机制采用头插法的方式移动元素,这样会造成链表闭环,形成死循环。JDK1.8中HashMap使用高低位来平移元素,这样保证效率的同时避免了多线程情...原创 2019-09-11 14:59:42 · 3955 阅读 · 5 评论 -
必知必会--Hashtable扩容机制
前言今天阅读源码时,在Hashtable的扩容机制看到一个有意思的点,整理之后写出来分享给大家。正文Hashtable的扩容机制通过rehash()来实现,如果Hashtable中元素的个数大于临界值时,会调用rehash()来实现扩容。临界值的大小等于Hashtable数组的大小与负载因子相乘,默认的负载因子大小为0.75。protected void rehash() { ...原创 2019-09-16 14:54:32 · 11012 阅读 · 0 评论