数组、链表、集合、table、map、二叉树、索引、数据库

数据结构:帮助数据快速读写的一种结构模型,数据库是 系统文件+索引(索引是各种数据结构提高数据检索以平衡数据读写速度,系统文件是存储用户真正的数据,比如业务表数据、文件、图片等等)

1.数组:再内存上是连续的一组数据,读写快,插入、删除 慢 (arrayList等 是专门封装了数组操作,不过插入等操作可能会有越界等异常。)

比如 int[] k = new int[10];

会在内存中开辟一个连续10个地址的块出来存放数据。k变量指针指向第一个数据

当要读取或者 写入的时候,比如:k[4] = 5;  int j = k[4];  他能直接取数组内的值,根据第一个数据指针位置再去偏移三位就行;

当数组读写满了之后,你要新插入数据或者删除一个数据(改变数组大小)就很慢

比如  要在  k[3]  和 k[4]之间插入N个数据(int[] m = new int[]{1,2,3,4,...,N};),你得重新新建一个数组然后复制原有的数据到新位置,再补充进来新的数据(数组复制可以用循环或者Arrays.copyOf方法) 

注:1.arrays类提供了数组常用操作 ,底层使用了Systm.arraycopy ( nativ方法,直接调用系统底层方法)

2.copyOf是会新建数组、扩容,然后复制数据

3.system.arraycopy 是把源数组第几个开始,复制到新数组第几个开始,复制多少个

k = System.copyOf(k, 10+N);   

system.arraycopy(k,4,k,4+N,6);

// k[3] 和k[4]之间插入数据,那么k[4]要搬到k[4+N]的位置,后面的也要偏移N个搬走,一共有6个要搬走(k[0]到k[3] 四个元素不用动,剩下6个元素偏移搬走)

然后循环插入新来N个元素   

system.arraycopy(m,0,k,4,N);

(ArrayList是每次扩容1.5倍, 他是 size+size>>1   右移是除以2(如果有小数会忽略))

链表:读写慢,插入、新增快,再内存上是不连续的、不用扩容,靠对象指针指向下一个\上一个来移动

单链:将原对象指针、下一个指针封装成一个新的对象

双链:将原对象指针、下一个指针、上一个指针 封装成一个新的对象;目的是更快速的拿到靠队尾的元素

比如当前长度是10,他去拿索引位置为8的元素,他会判断8与5(size>>1)的大小比较,如果如果小,从队前开始往下找,大或等于,从队尾开始往上找。

这时他是大,就从队尾循环 2次;(如果他要 从队前找,需要循环7次)

新增快:比如他要再第8个索引位置与9索引位置加N个

1.把N个对象封装成Node对象,维护好他们彼此间的上下指针

2.他改动8位置的下一个索引指针,指向N的队前,然后改N的队尾的下一个为9位置,改9的上一个为N的队尾

table、map: 

hastable他是字典,key\value都不能为空,碰撞概率小,用单链做存储桶;

hashmap他是数据地图,key\value可以为空,碰撞概率大,用双链做存储桶;

注:hash碰撞是指  两个或多个对象的hashcode与hash桶数组size的&运算的结果一致

用途不一样,table用作系统环境参数存储、少量本地缓存等;map用于用户数据缓存、系统间数据缓存等

由于用途不一样,所以他们的碰撞概率不一样,key\value约束不一样

table由于碰撞概率小,所以用单链做hash桶,减小没必要的内存;map碰撞大,用双链做hash桶,提供检索速度

他两取数逻辑都是通过对象hashCode和tab的大小&运算定位所在存储桶(数组tab中的位置),然后循环存储桶(链表)定位数据

1.他两都是封装了node对象数组(tab),元素size

2.table再new对象的时候初始tab;map再new的时候不会初始tab大小

3.table没有resize  map有resize

4.有初始大小参数的构造方法以及resize 会计算threshold

5.threshold 有参构造方法中,刚开始是下一次tab的大小(tablesizefor 返回initsize-1最近的2的指数次的一个数+1),resize()之后变成tab大小乘以负载因子

6.put的size超过threshold他的时候会触发rsize(他是)

7.resize会重新调整元素位置,所以一般用map要估算用多少,然后使用有参的构造方法,减少resize次数

8.put的key对象的hashCode方法返回的值尽量不要重复,根据业务,复写hashCode,根据属性参数自定义hashCode (Objects.hash方法)

9.resize每次都是tab两倍递增(左移)、元素重新hash定位

10.如果要提高空间利用率,可以提高负载因子,但是会一定程度上减慢查询速度。

11.  负载因子 <1 的时候    空间利用率<负载因子       负载因子 >1 的时候 空间利用率 <=100%

二叉树见 https://mp.csdn.net/mp_blog/creation/editor/88776485
hashmap当存储桶超过8的时候,链表会转为二叉树中的一种(treeifyBin方法)
索引类似map,不过他的负载因子很大,根节点没几个,数据库是系统文件+索引(根据需要查找的字段建立索引),然后快速读取、写入文件资源,

数据库:分为关系型数据库、非关系型数据库(redis是非关系型数据库)
常用的数据库是mysql、oracle、redis,这些是内部维护了索引与资源数据的关系逻辑;

关系型数据库是通过sql维护数据


ES服务是搜索引擎,存了资源的信息json, 通过restful api维护 然后根据信息字段建立索引,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地缓存数据存入文件中

文章目录 演示代码本地缓存数据存入文件从文件提取数据到本地缓存工具类 实战初始化操作执行 本地缓存数据存入文件 的线程任务持久化工具类 演示代码 本地缓存数据存入文件 public static void testQ15() {LinkedBlockingDeque<ConcurrentHashMap<String, ConcurrentHa…

【STM32HAL库】外部中断

目录 一、中断简介 二、NVIC 1.寄存器 2.工作原理 3.优先级 4.使用NVIC 三、EXTI 1.简介 2.AFIO&#xff1a;复用功能IO&#xff0c;主要用于重映射和外部中断映射配置​编辑 3. 中断使用 4.HAL库配置使用 一、中断简介 中断的意义&#xff1a;高效处理紧急程序&#xff0c;不会…

[C++初阶]一些类的选择题

本篇就是举例一些类的选择题,用于提高大家的基础,便于记忆。 1.有一个类A&#xff0c;其数据成员如下&#xff1a; 则构造函数中&#xff0c;成员变量一定要通过初始化列表来初始化的是&#xff1a;&#xff08; &#xff09; &#xfeff;class A { ... private: int a; publi…

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏

SPRD Android 14 通过属性控制系统设置显示双栏或者单栏 第一步 确认有添加静态库第二步 验证第三步 修改源码在合适的地方配置 ro.product.is_support_SettingsSplitEnabled 即可。第一步 确认有添加静态库 --- a/packages/apps/Settings/Android.bp +++ b/packages/apps/Set…

Uniapp 报错Uncaught URIError: URI malformed

场景&#xff1a;数据中有url,或者别的不规则的字符&#xff0c;就会报错 解决办法&#xff1a; 1、将复杂参替换 //传复杂参替换encodeContent(key) {const encodeArr [{code: %,encode: %25}, {code: ?,encode: %3F}, {code: #,encode: %23}, {code: &,encode: %26},…

php反序列化逃逸

php反序列化逃逸 逃逸是php中反序列化时的恶意利用&#xff0c;以ctf为例演示 第一段演示 逃逸为ctf反序列化的内容&#xff0c;主要是对序列化对象进行过滤&#xff0c;其中替换串长度不一致&#xff0c;造成字符逃逸。攻击者可以构造恶意的payload&#xff0c;改变对象中的…

MATLAB循环语句

MATLAB 循环语句 在某些情况下&#xff0c;您需要多次执行一个代码块。通常&#xff0c;语句是按顺序执行的。首先执行函数中的第一条语句&#xff0c;然后执行第二条&#xff0c;依此类推。 编程语言提供了各种控制结构&#xff0c;允许更复杂的执行路径。 循环语句允许我们…

猫头虎分享已解决Bug || **Error: ‘Promise‘ is undefined**

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

3.8设计模式——State 状态模式(行为型)

意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 结构 Context&#xff08;上下文&#xff09;定义客户感兴趣的接口&#xff1b;维护一个ConcreteState子类的实例&#xff0c;这个实例定义当前状态。State&#xff08;状态&#xff09;定义…

4 -25

1 100个英语单词两篇六级阅读 2 cf补题&#xff1b; 3 仿b站项目看源码 debug分析业务。 上了一天课&#xff0c;晚上去健身。 物理备课&#xff0c;周六去上课腻。 五一回来毛泽东思想期末考试&#xff0c;概率论期中考试。

冯诺依曼体系结构再谈操作系统

前言 前面对基本的指令、权限以及环境开发的基本工具进行了介绍&#xff0c;本期开始我们将进入系统的的学习&#xff0c;例如我们常听的进程等&#xff0c;在进入进程的学习前我们先要铺垫一下&#xff0c;所以本期我们先来介绍一下冯诺依曼体系结构和再谈操作系统&#xff0…

30 番外5 AHK语法应用实战

番外5 AHK语法应用实战 ahk是一种极其轻量,极其易上手,极其方便好用的脚本语言,对于没有编程基础的人来说,可以轻松掌握. 作为一个强大轻量的工具,ahk主要提供了热键宏操作. 什么是热键宏?简单的理解,就是自定义快捷键. AHK使用场景举例 ahk到底有什么用处呢? 1.把一个按键映…

关于TrAXFilter类在动态加载的利用思考以及如何无视构造器获取对象

第一个问题 今天在又看cc3的时候想不通一个问题&#xff0c;就是关于TrAXFilter这个类&#xff0c;我们看到这个类的构造方法 public TrAXFilter(Templates templates) throwsTransformerConfigurationException{_templates templates;_transformer (TransformerImpl) tem…

DRF案例之车厂API

DRF案例之车厂API 目录 DRF案例之车厂API需求urls.pymodels.pyviews.pyMySerializers.pyMyValidate.pyMyFilter.pyMyPagination.pysettings注册自定义类国际化输出 需求 定义车型表(CarModel)&#xff0c;车厂表(CarFactory)&#xff0c;经销商表(Distributor)一个车厂可以生产…

做亚马逊店铺怎么解决网络问题?

在全球电商市场迅速崛起的背景下&#xff0c;亚马逊已成为众多商家拓展海外市场的首选平台。然而&#xff0c;网络问题始终困扰着亚马逊商家&#xff0c;若不能有效解决&#xff0c;不仅影响工作效率&#xff0c;更可能面临店铺被封禁的风险。本文将详细介绍亚马逊店铺运营遇到…

C++_跨平台编译_cmakefile中_添加内容

C_跨平台编译_cmakefile.txt中_添加内容, 包含 cmakefile.txt中 1. 系统架构(aarch64) 2. gcc g编译器位置 3. 架构指定: march 4. 你的root一些基础的lib, bin文件路径 (YOUR_SYSROOT) # 在x86上, 编译linux系统下 aarch64版本的库文件: SET(CMAKE_SYSTEM_NAME Linux) SE…

xgp加速器免费 微软商店xgp用什么加速器

2001年11月14日深夜&#xff0c;比尔盖茨亲自来到时代广场&#xff0c;在午夜时分将第一台Xbox交给了来自新泽西的20岁年轻人爱德华格拉克曼&#xff0c;后者在回忆中说&#xff1a;“比尔盖茨就是上帝。”性能超越顶级PC的Xbox让他们趋之若鹜。2000年3月10日&#xff0c;微软宣…

Vision Pro“裸眼上车”,商汤绝影全新舱内3D交互亮相

2023年&#xff0c;Apple Vision Pro的横空出世让人们领略到了3D交互的魅力&#xff0c;商汤绝影通过深厚的技术研发实力和高效的创新迭代效率&#xff0c;带来两大全新座舱3D交互&#xff1a;3D Gaze高精视线交互和3D动态手势交互。 作为全球首创的能够通过视线定位与屏幕图标…

​.NET基础入门​

.Net平台 概念&#xff1a;.net与C# .net/dotnet:一般指.Net Framework框架&#xff0c;一种平台&#xff0c;一种技术。 C#(sharp):一种编程语言&#xff0c;可以开发基于.net平台的应用。 (*)Java即是一种平台又是一种编程语言 .Net FrameWork框架是.Net平台不可缺少的一…

C语言中整型与浮点型在内存中的存储

今天让我们来看看整型的数据和浮点型的数据在内存中是怎么存储的呢 整型数据在内存中的存储 整型数据在内存中存储的是二进制的补码 正数的话也没什么可说的&#xff0c;原码反码补码都相同 我们来看看负数&#xff1a; 以-5为例 原码&#xff1a;10000000 00000000 00000000 0…