文章内容输出来源:拉勾教育Java高薪训练营,做者:孙里面试
【歪里谐说】1 JVM内存结构 https://my.oschina.net/u/4033707/blog/4444869安全
前言
你们好,上次看完【重讲拉勾】1 JVM内存结构
感受怎么样?此次,咱们沿用上次的思路来记忆下Java容器的内容。并发
问题
面试时是否是会被问道:请你讲讲你所了解的Java容器,记住多少讲多少。
也许说到某一个具体类时,你能够说出些皮毛。可是,面对总体那么多类,你又能记住多少个呢?先看下面这张经常使用容器一览图,其中我又抽象出了生活场景中的车位。学习
(点开看清晰全图).net
下边咱们逐个分开看下:
1. List
对照上边两张图有没有感受?第二张图像不像ArrayList?若是这条路是死胡同,像不像Stack?线程
写时复制我想象到的是临时车位,你也能够理解成由于这个车位有车,你只好在旁边临时停靠一下。(更深层次的细节能够忽略,主要是为了映射一个方便记忆的概念)code
2. Set
为何使用车展表示Set呢?由于set的最大特性就是元素不重复,而车展上通常都是每一个型号只有一辆车(忽略特殊状况)。对象
这里说下EnumSet。由于里边存的是枚举类型,即同一个类别中的不一样选项。好比,Color.Blue、Color.Red等等,是否是和同款车型,不一样型号(高配,低配),不一样颜色的型号相似呢。blog
再说下ConcurrentSkipListSet。并发线程安全能够想象成有多个楼层的车展场所(各个楼层的活动和人流互不影响),并且时不时还挂着区域标识(好比A二、B4),让人能够快速按顺序找到本身想去的展位。队列
3. Queue
像不像队列?每辆车都只能按顺序通行(这里先忽略超车插队的状况,后边会提到)
想象成双端队列,对比单行路一个方向而言,两个方向均可以出车。
若是我不说,你是否是已经想到了堵塞队列?
有没有发布订阅/生产者消费者的感受?通常机场或者车站外边会有必定数量的出租车在等候,若是车都走了,只能是旅客排队等候了。
4S店的试驾车可能一个型号只有一辆,须要排队等候。而后来一个客户就能够出发。
仍是结合多层互不干扰的想法,是否是能够类比线程安全?
须要等候红灯的场景是否是能够联想到延迟等待队列?多岔路口又能够类比有优先级的阻塞队列。
开过车的人都知道转弯的车要让直行的车先走,或者还能够想象救护车、消防车等有行驶优先权的车,这就叫优先级队列。
而车距远近是为了理解Array和Link的对象地址是否连续的状况。
4. Map
小区车位都是标记了车牌号的,只有车位的主人才能停放。通常也是按照门牌号顺序排列的。
若是有外来车辆须要临时停靠,可能也会占用。可是当车主的车辆回来的时候,临时占用者不得不挪开。
有时候只须要核对车牌号,有时候还要核对车型。
有的高档小区会有多层底下停车位,同样仍是每层互不干扰。
结语
看了这么多的图,是否是稍微有点印象了?再应付面试时问到集合类有哪些时是否是好歹能够说出几个了?(可别说成停车场)
本文的目的仍是为了解决知识持久化的问题,相关知识的学习还须要继续深刻查阅其余资料。好了,本期到此,咱们下期见。若是还有下期的话~