博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArrayList、LinkedList、HashMap底层实现
阅读量:6005 次
发布时间:2019-06-20

本文共 758 字,大约阅读时间需要 2 分钟。

ArrayList 底层的实现就是一个数组(固定大小),当数组长度不够用的时候就会重新开辟一个新的数组,然后将原来的数据拷贝到新的数组内。

LinkedList 底层是一个链表,是由java实现的一个双向链表其节点如下:

class Node 

{

  private Node privious;//指向前一个节点

  private Object value;//当前节点的value值

  private Node next;//指向下一个节点的值,类似于指针。

}

然后实现其增删改查操作,和数据结构中链表的增删改查完全相同,而且插入是有序的。

HashMap底层是一个数组+链表实现。其基本原理是:定义一个LinkedList的数组,然后将数据存储到这个链表数组内,例如:LinkedList []list = new LinkedList[1000];这样就定义了一个如下图所示的数据结构:

 

其中上面一行是一个数组,数组中的一个元素对应一个链表。在插入元素的时候,首先根据key值来计算hash值h,然后计算h%1000得到一个数字,然后把该对象插入到对应的数组元素内:如:h%1000得到10,那就将对象插入到list[10]这个链表内。插入的

内容是一个数据项,其结构如下:

class{

  String key;

  Object value;

}

HashSet的底层实现是通过Map来实现的,Set中不允许有重复的元素,类似于集合,在HashSet的实现的时候,通过Map来实现,每次往Set里添加数据,都会将数据设置为Map的键值,Map的值设置一个默认值,因为Map的键值不能重复,所以每次添加到Set内的

数据也不能重复。

以上只是我简单的理解,具体的代码实现可以观看源码进行学习和分析。

转载地址:http://jesmx.baihongyu.com/

你可能感兴趣的文章
使用Goldengate同步异构数据库Kafka中间件之一
查看>>
Unable to find the socket transport "http"
查看>>
MySQL高可用性之MHA
查看>>
Redisbook学习笔记(2)内存映射数据结构(1)压缩列表
查看>>
oracle 11g dataguard维护注意事项
查看>>
ORACLE系列脚本1:救命的应急会话处理脚本
查看>>
计算/etc/目录所有*.conf配置文件所占总空间大小
查看>>
python——ip加入nginx黑名单
查看>>
自动化技术初出茅庐,ansible使用解析。
查看>>
Microsoft Azure Site Recovery (2) 配置虚拟机保护
查看>>
Apache CouchDB安装及入门
查看>>
企业实际应用之同步远程yum源到本地
查看>>
一次核心线上磁盘差点爆满坑人事件...
查看>>
Oracle 添加RAC数据库集群节点(二)
查看>>
AIX 5 ftp 文件传输
查看>>
企业Java应用服务器之JBoss7.1与Apahce整合
查看>>
oculus,一种未来的交流方式
查看>>
选择优异Linux培训机构的几点建议
查看>>
Rsync镜像同步工具的安装配置
查看>>
python脚本判断一个数是否为素数的几种方法
查看>>