
Java基础
霁云HYY
博客中的很多内容都是取自公众号《儒猿技术窝》中的专栏,进行了一定的修改和总结,感兴趣的同学可以自行查找更加具体的专栏参考和学习
展开
-
HashMap扩容 JDK1.8的rehash算法优化
HashMap的底层数据结构是数组,如果发生了hash冲突的话,会采用拉链法,将数组中的节点挂载成一个链表,JDK1.8之后如果链表节点数量太多,超过阈值8的话,就会转化为红黑树。因为HashMap在遍历key的时候,如果是链表的话,会循环遍历整个链表,时间复杂度是O(n),效率较低,使用红黑树的话,时间复杂度是O(logn),可以有效提升效率 好像有点跑题了,主要是想说HashMap的底层其实是...原创 2020-03-24 22:56:20 · 7539 阅读 · 11 评论 -
Java的volatile关键字
volatile是Java虚拟机提供的最轻量级的同步机制,当一个变量使用volatile关键字修饰之后,它就会具备两种特性: 可见性 使用volatile修饰之后的变量,当一个线程修改了这个变量的值,新值对于其他线程来说也是立即可见的。一个很典型的应用场景就像下面的代码 volatile boolean shutdownRequested; public void shutdown()...原创 2020-01-07 20:49:43 · 200 阅读 · 0 评论 -
线程池ThreadPoolExecutor参数简析
创建线程池推荐使用ThreadPoolExecutor,而不是Executors Executors包含四种创建线程池的方法 newFixedThreadPool:可重用固定线程数的线程池 newSingleThreadExecutor:只有一个线程的线程池 newCachedThreadPool :根据需要创建新线程的线程池 newScheduledThreadPool:主要是在给定延时后执行...原创 2019-12-23 20:47:51 · 267 阅读 · 0 评论 -
HashMap简析
1、寻址算法优化 HashMap的底层是一个数组,要知道元素存储在数组的哪一个位置,就需要将元素的hash值跟数组长度进行取模,这样就能得到元素在数组中的下标了,但是在HashMap中并不是使用的这种简单的取模方式,而是使用了下面这种方式 int index = (n - 1) & hash; HashMap中获取元素下标使用的是(n - 1) & hash,n为数组长度,这样的...原创 2019-12-14 17:40:37 · 793 阅读 · 1 评论