文章内容输出来源:拉勾教育Java高薪训练营
【歪讲拉勾】1 JVM内存结构 https://my.oschina.net/u/4033707/blog/4444869
前言
大家好,上次看完【重讲拉勾】1 JVM内存结构感觉怎么样?这次,我们沿用上次的思路来记忆下Java容器的内容。
问题
面试时是不是会被问道:请你讲讲你所了解的Java容器,记住多少讲多少。
也许说到某一个具体类时,你可以说出些皮毛。但是,面对整体那么多类,你又能记住多少个呢?先看下面这张常用容器一览图,其中我又抽象出了生活场景中的车位。

(点开看清晰全图)
下边我们逐个分开看下:
1. List


对照上边两张图有没有感觉?第二张图像不像ArrayList?如果这条路是死胡同,像不像Stack?
写时复制我想象到的是临时车位,你也可以理解成因为这个车位有车,你只好在旁边临时停靠一下。(更深层次的细节可以忽略,主要是为了映射一个方便记忆的概念)
2. Set


为什么使用车展表示Set呢?因为set的最大特性就是元素不重复,而车展上一般都是每个型号只有一辆车(忽略特殊情况)。
这里说下EnumSet。因为里边存的是枚举类型,即同一个类别中的不同选项。比如,Color.Blue、Color.Red等等,是不是和同款车型,不同型号(高配,低配),不同颜色的型号类似呢。
再说下ConcurrentSkipListSet。并发线程安全可以想象成有多个楼层的车展场所(各个楼层的活动和人流互不影响),而且时不时还挂着区域标识(比如A2、B4),让人可以快速按顺序找到自己想去的展位。
3. Queue


像不像队列?每辆车都只能按顺序通行(这里先忽略超车插队的情况,后边会提到)

想象成双端队列,对比单行路一个方向而言,两个方向都可以出车。

如果我不说,你是不是已经想到了堵塞队列?

有没有发布订阅/生产者消费者的感觉?一般机场或者车站外边会有一定数量的出租车在等候,如果车都走了,只能是旅客排队等候了。

4S店的试驾车可能一个型号只有一辆,需要排队等候。然后来一个客户就可以出发。

还是结合多层互不干扰的想法,是不是可以类比线程安全?

需要等候红灯的场景是不是可以联想到延迟等待队列?多岔路口又可以类比有优先级的阻塞队列。
开过车的人都知道转弯的车要让直行的车先走,或者还可以想象救护车、消防车等有行驶优先权的车,这就叫优先级队列。
而车距远近是为了理解Array和Link的对象地址是否连续的情况。
4. Map


小区车位都是标记了车牌号的,只有车位的主人才能停放。一般也是按照门牌号顺序排列的。
如果有外来车辆需要临时停靠,可能也会占用。但是当车主的车辆回来的时候,临时占用者不得不挪开。
有时候只需要核对车牌号,有时候还要核对车型。

有的高档小区会有多层底下停车位,一样还是每层互不干扰。
结语
看了这么多的图,是不是稍微有点印象了?再应付面试时问到集合类有哪些时是不是好歹可以说出几个了?(可别说成停车场)
本文的目的还是为了解决知识持久化的问题,相关知识的学习还需要继续深入查阅其他资料。好了,本期到此,我们下期见。如果还有下期的话~
最后送上一张福利图,感谢大家阅览。

来源:oschina
链接:https://my.oschina.net/u/4033707/blog/4478324