Java集合框架源码解析之数组与链表
本系列文章会陆续对 Java 集合框架(Java Collections Framework,JDK1.8)中的几个常用容器结合源码进行介绍,帮助读者建立起对 Java 集合框架清晰而深入的理解,也算是对自己所学内容的一个总结归纳
因为数组与链表是 Java 集合框架中很多地方都涉及到的知识点,此篇文章作为开头,就先对数组与链表这两种数据结构进行介绍
数组与链表是两种差别较大的数据结构,在内存空间上的存储方式也有很大区别
数组
假设现在有6个元素存放在数组中,则数组在内存中的存储结构就如下图所示
- 数组是一块连续的内存空间,包含的元素按照坐标索引依次排列,可以直接通过坐标定位到每一个数据的内存地址,例如可以直接通过坐标 3 获取到 element4,省去了链表中的遍历过程,因此随机读取数据的效率较高
- 相对应的,由于要求数组中的元素是连续的,在添加数据或移除数据时,有可能会导致大量数据在内存中的前后移动,因此数组在添加和移除数据时效率较低
- 数组在使用前需要先指定其空间大小,如果我们在使用前已知待存入的数据量,自然可以直接以此进行初始化而不会浪费内存空间,但实际数据量往往是未知的,通常会因为申请了较大的内存空间导致浪费或者是申请少了导致数据无法存放,而数组在声明空间大小后是无法再次修改的
在 ArrayList 与 HashMap 等容器类中,其底层实际用来存放数据的结构都是数组
链表
假设现在有4个元素依靠链表来存放,则链表在内存中的存储结构就如下所示
- 图中所展示的是一个双向链表,即每个结点除了要包含实际的数据外,还需要两个引用分别用于指向上一个结点(prev)和下一个结点(next),此外还需要有两个引用分别指向头结点(first)和尾结点(last),方便进行正向遍历和反向遍历
- 链表不要求有连续的内存空间,新添加的结点可以在内存中的任何位置,只要上一个结点保存有下一个结点的引用即可
- 由于链表的内存空间不是连续的,因为在随机访问数据时只能选择遍历整个链表,在最坏的情况下需要遍历整个链表。当然,可以根据实际情况来选择是正向遍历还是反向遍历,以此提高访问效率
- 在添加或移除元素时,只需要修改相邻结点对指定结点的引用即可,而不需像数组那样需要移动元素,因此链表在添加和移除元素时的效率较高
- 链表不需事先申请内存空间,根据实际使用情况可以进行动态申请
在 HashMap 中,其底层在存放数据时就使用到了链表
更详细的源码解析可以看这里:Java_Android_Learn
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2018-06-15 第四十天
一、TCP 使用Socket 对象 进行 通信 ,使用底层的TCP 协议。 面向连接的协议。 1:先建立连接。 通信的两端 都会有进行通信的Socket 对象。 2:使用Socket 对象 使用字节流进行消息的通信。 importjava.io.BufferedReader; importjava.io.BufferedWriter; importjava.io.DataInputStream; importjava.io.DataOutputStream; importjava.io.InputStreamReader; importjava.io.OutputStream; importjava.io.OutputStreamWriter; importjava.net.ServerSocket; importjava.net.Socket; /** *使用Socket连接服务器,给服务器发送一条信息。服务器收到之后,反馈一个boolean值。 * */ publicclassMyServer { publicstaticfinalintSERVER_PORT= 1777;...
- 下一篇
使用 IIS 在 Windows 上托管 ASP.NET Core2.0
原文: 使用 IIS 在 Windows 上托管 ASP.NET Core2.0 准备: 操作系统:Windows Server 2008 R2 或更高版本 开发环境:VS2017 第一步:新建项目ASP.NET Core Web应用程序 在 Visual Studio 中,选择“文件”>“新建”>“项目”。 在新建项目对话框的左侧窗格选择“.NET CORE”, 在中间窗格中,点击“ASP.NET Core Web 应用程序(.NET Core)” 修改自己的项目命名及存储位置 点击确定 在版本选择器下拉框中选择“ASP.NET Core 2.0”选择“Web 应用程序(Model-View-Controller)”点击“确定” 创建完成后,点击"F5"或者“Ctrl-F5”就能看到程序在本地成功运行了,如下图: 第二步:发布 无需修改代码,直接右击.NET Core项目选择发布 创建新配置文件 选择IIS,点击发布 下拉选择“文件系统”,选择发布路径,点击下一页 选择如图配置,点击保存 第三步:IIS配置 在服务器管理器中,单机添加角色,勾选IIS,很简单网上很多教...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路