zoukankan      html  css  js  c++  java
  • 转行小白成长路-java篇

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

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

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

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

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

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

  • 相关阅读:
    什么时候用using (SPSite site = new SPSite(SPContext.Current.Web.Url))
    在picture library中取某一图片的大图、小图
    jetbrain phpstorm 增加或删除一个 live template
    用 monitorix 开启linux图形化监控
    360上传应用|应用宝上传应用
    markdown 自定义一个锚点
    用CKEDITOR 做自助上传的解决方案2
    按键精灵*ff
    按键精灵http.定义getWeb
    markdown 自己搞一个浏览工具
  • 原文地址:https://www.cnblogs.com/aiwin/p/12507628.html
Copyright © 2011-2022 走看看