常见数据结构在内存中是怎么存储的
三人行,必有吾师,欢迎加入星球,一起讨论技术点滴
前言:
在开发中,经常用到数组,ArrayList,HashMap等,他们在内存中是怎么存储的呢?
其实在他们在申请内存时,要么是一块连续的内存,要么是分散的,要么是内存和连续的结合使用。说白了在底层存储结构只有两种:数组和链表;
数组是连续的,只要知道了首地址,就可以通过步长访问数组内所有的值,如果arraylist是基于数组的。
链表是分散的,每个位置除了包含值还会包含下一项的指针,双向链表会前后两项的指针。
ArrayList
ArrayList底层是基于数组存储的,相对于数组,arraylist可以动态扩容(使用数组时,在定义时,需要指定长度,但arrayList不需要)。
所以arrayList中存储是连续的,查询会很方便。但删除插入时,除非是尾部,否则都会涉及到其他位置的重新赋值,影响效率。
ArrayList的动态扩容,定义arraylist时,如果没有定义长度,默认的长度是10 可能不同换jdk有不同的实现,当需要扩容时,会申请一块原size 1.5倍的内存块(new_size=old_size+old_size>>1),然后将原内存块中的内容复制到新的内存块中。原内存块清空,从而实现扩容。
LinkedList
linkedList 底层是基于 链表的,每个结点,都会有前一个和下一个的指针,插入删除,也只需要改变指针指向的位置就可以了。
hashMap
hashmap 是基于数组和链表的,hashMap 默认申请大小为16 的数组,当存储时,根据key的hashCode,决定存储在数组中的第几个索引,如果该索引已经存储了其他元素,刚判断两个key是否相等,如果相等,刚覆盖,否则存储在该索引处的链表中。hashMap扩容时,也需要重新申请一块连续的内存,将原内存块内容复制到新的内存块中,但是个索引处的链表节点,不需要重新创建。hashMap 扩容机制:默认长度是16 如果需要扩容则扩为原来的2倍。
常见数据结构在内存中是怎么存储的相关推荐
- @清晰掉 C++ 中的 enum 结构在内存中是怎么存储的?
C++ 中的 enum 结构在内存中是怎么存储的? C++ C++ 中的 enum 结构在内存中是怎么存储的?里面存储的是常量值吗? 关于占用内存的大小,enum类型本身是不占内存的,编译器直接替换 ...
- C语言学习(十一)小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么?
C语言学习(十一)小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么? 浮点数与定点数 小数在内存中以浮点数形式存储.浮点数并不是一种数值分类,他和整数.小 ...
- 转载——C语言中float,double类型,在内存中的结构(存储方式)
最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...
- 计算机中小数如何储存,小数在内存中是如何存储的?
小数在内存中是如何存储的? 文本关键字:小数.float.double.浮点数.精度 一.IEEE 754(二进制浮点数算术标准) 在学习进制转换时,我们了解到:我们经常使用的十进制数是转换为二进制进 ...
- 16 bit float 存储_小数在内存中是如何存储的,揭秘诺贝尔奖级别的设计(长篇神文)...
小数在内存中是以浮点数的形式存储的.浮点数并不是一种数值分类,它和整数.小数.实数等不是一个层面的概念.浮点数是数字(或者说数值)在内存中的一种存储格式,它和定点数是相对的.C语言使用定点数格式来存储 ...
- 数据结构和内存中堆和栈的区别
特别声明:本文参考了博客:http://blog.csdn.net/wolenski/article/details/7951961#comments 堆和栈在 我的眼里一直是很模糊的概念,只是简单的 ...
- C语言中float,double类型,在内存中的结构(存储方式).
从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度. 任何数据在内存中都是以二进制(0或1)顺序 ...
- 【Java数据结构】计算机中数据的存储方式(为什么要使用B树)
多路查找树 计算机的存储 内存 硬盘 硬盘基本构成 硬盘存储的优缺点 磁盘的预读 二叉树与B树 二叉树读取数据 B树读取数据 计算机的存储 计算机中的存储大致可以分为内存与硬盘存储,硬盘还能继续分为机 ...
- double取两位小数_Java语言中:float、double数据类型在内存中是如何存储的
java语言中,float类型数字在计算机中用4个字节(32位)来存储.double类型占用8个字节(64位). 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float ...
最新文章
- Java中Math类常用函数总结
- JAVA基础12-继承(3)
- java虚拟机(二)
- 这款AI耳机可以主宰你的情绪,决定让你是哭还是笑
- 3MIN干完一周的工作量?快来看看应该如何部署 Kubernetes!
- linux shell 创建序列数组(list,array)方法
- Windows2003利用×××+NAT+静态路由表建立网通电信双线×××服务器
- 862. 和至少为 K 的最短子数组
- 怎么实现注解_通透!一口气搞懂注解到底怎么用
- 怎么打开网络访问 计算机共享,电脑只要打开共享提示“无法启用共享访问”如何解决...
- C++ Vector详解
- matplotlib 设置标注方向_Matplotlib绘制带主题及聚类类标的散点图
- python文件读写及形式转化和CGI的简单应用
- Java8 的 Stream API 的确牛X,但性能究竟如何呢?
- java web 局部刷新页面_如何实现页面局部刷新(Java)
- Hadoop权威指南第四版数据下载代码
- Delphi 10.4.2 CE 社区版支持 Android API-30,之二
- 拼车小程序的市场应用与外包开发的建议
- 按着Phoenix Framework文档练个手,感受一下Elixir语言。
- oracle vm虚拟盒,虚拟盒子内部版下载|虚拟盒子虚拟机下载_最火软件站