转行小白成长路-java篇

第17章:容器深入研究--2

  这几节就是分开看不同类型,不同性能,以及一些实现原理。其中重点的就是散列码。先说散列码,我们之前认为是对象的地址,通常调用hashCode()会出来一堆数字,以为这些数是底层直接反出来的。实在没想到,它们其实是依赖数组的应用。用我通俗的话来讲就是变种二维数组。一个变种二维数组,就像书中所举的例子,在理解Map一小节下面举得例子。将其变形,外层对内存产生映射,就是外层数组记录了内存的位置,可以快速找到内层数据。

  List:它的实现思想是之前我们有读到,也有特意说出来,就是一个对象关联另一个对象,记录一个对象的同时,也记录另一个对象的地址。

  set:更像是二叉树衍生出来的,因为现实中也是set适合查询,要比List快很多,hashset更是。基于二叉树离不开的就是比较。因为要确定是在左边还是右边。hashset在此基础上利用散列的原理提高了查询速度。其中treeset利用的就是红黑树,红黑树是在二叉树之上演变出出来的。如果有空可以学学这部分,比较基础。

  stack:队列其实就是一种场景的实现,底层的实现的源码其实并没有多高级。包括先进先出也是利用取头部,或者类似的操作。

  map:我觉的map就是一个高级的Set,这是说hash相关,散列码方面。map和set很类似,因为普通的set也像,但是不是特别像。像的原因是它们都要保存下角标,不像是因为普通set并不保存完整的角标。map是利用二维数据来保存。书中的例子也很少的说明这个意思

原文地址:https://www.cnblogs.com/aiwin/p/12507628.html