![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaSE
文章平均质量分 95
希夷小道
这个作者很懒,什么都没留下…
展开
-
HashMap之tableSizeFor方法图解
在看HashMap源码时,注意到一个问题,容量必须是2的整数幂,为了保证这一点,专门给出了一个巧妙而高效的方法tableSizeFor。不妨想一下,如果是自己解决这个问题,该怎么解决?给定一个int类型的整数n,如何求出不小于它的最接近的2的整数幂m,比如给定10得出16,给定25得出32?普通人的简单粗暴方式普通人的想法可能比较简单,直接对n求以2为底的对数,结果m是double类型,若小数部分为0,则m就是我们要求的指数;小数部分不为0,则对m向上取整,最后直接求2的m次幂。首先遇到的问题是原创 2021-03-11 14:18:43 · 124 阅读 · 0 评论 -
阅读源码,HashMap回顾
本文一是总结前面两种集合,补充一些遗漏,再者对HashMap进行简单介绍。回顾因为前两篇ArrayList和LinkedList都是针对单独的集合类分析的,只见树木未见森林,今天分析HashMap,可以结合起来看一下java中的集合框架。下图只是一小部分,而且为了方便理解去除了抽象类。Java中的集合(有时也称为容器)是为了存储对象,而且多数时候存储的不止一个对象。可以简单的将Java集合分为两类:一类是Collection,存储的是独立的元素,也就是单个对象。细分之下,常见的有List,S原创 2021-03-11 14:11:20 · 78 阅读 · 0 评论 -
阅读源码,从ArrayList开始
前言为啥要阅读源码?一句话,为了写出更好的程序。一方面,只有了解了代码的执行过程,我们才能更好的使用别人提供的工具和框架,写出高效的程序。另一方面,一些经典的代码背后蕴藏的思想和技巧很值得学习,通过阅读源码,有助于提升自己的能力。当然,功利的讲,面试都喜欢问源码,阅读源码也有助于提升通过面试的概率。结合今天的主题,一个很简单的问题,在刚学习集合时,我们都使用过如下代码,但是下面几行代码有区别吗?List list1 = new ArrayList();List list2 = new Array原创 2020-10-09 20:34:47 · 125 阅读 · 0 评论 -
阅读源码,通过LinkedList回顾基础
前言本文基于jdk1.8书接上回,在简单介绍ArrayList的时候,提到了ArrayList实现了RandomAccess接口,拥有随机访问的能力,当时说到了这个接口配合LinkedList理解更容易。今天就来还愿了,开始阅读LinkedList。LinkedList也算我们比较常用的几个集合之一了,对普通程序员来说,List list1 = new ArrayList()List list2 = new LinkedList(),该怎么选择?其实二者最大的区别在于实现方式的不同,只看原创 2020-11-03 23:18:12 · 119 阅读 · 0 评论