当前位置: 首页 > news >正文

南宁市兴宁建设局网站网站死链检测工具

南宁市兴宁建设局网站,网站死链检测工具,编程scratch网站,佛山知名营销网站开发一、前言数组是数据结构还是数据类型?数组只是个名称,它可以描述一组操作,也可以命名这组操作。数组的数据操作,是通过 idx->val 的方式来处理。它不是具体要求内存上要存储着连续的数据才叫数组,而是说&#xff0c…

一、前言

数组是数据结构还是数据类型?

数组只是个名称,它可以描述一组操作,也可以命名这组操作。数组的数据操作,是通过 idx->val 的方式来处理。它不是具体要求内存上要存储着连续的数据才叫数组,而是说,通过连续的索引 idx,也可以线性访问相邻的数据。

那么当你定义了数据的存储方式,也就定义了数据结构。所以它也是被归类为数据结构。

二、数组数据结构

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型数据的集合

数组的特点:

  1. 数组是相同数据类型的元素集合(int 不能存放 double)

  1. 数组中各元素的存储是有先后顺序的,它们在内存中按照这个顺序连续存放到一起。内存地址连续。

  1. 数组获取元素的时间复杂度为O(1)

1. 一维数组

一维数组是最常用的数组,其他很多数据结构的变种也都是从一维数组来的。例如 HashMap 的拉链寻址结构,ThreadLocal 的开放寻址结构,都是从一维数组上实现的。

2. 二维数组

二维以及多维数组,在开发场景中使用到的到是不多,不过在一些算法逻辑,数学计算中到是可以使用。

三、实现数组列表

1. 基本设计

数组是一个固定的、连续的、线性的数据结构,那么想把它作为一个自动扩展容量的数组列表,则需要做一些扩展。

/*** 默认初始化空间*/
private static final int DEFAULT_CAPACITY = 10;
/*** 空元素*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
/*** ArrayList 元素数组缓存区*/
transient Object[] elementData;
  1. 初始化 ArrayList 阶段,如果不指定大小,默认会初始化一个空的元素。这个时候是没有默认长度的。

  1. 那么什么时候给初始化的长度呢?是在首次添加元素的时候,因为所有的添加元素操作,也都是需要判断容量,以及是否扩容的。那么在 add 添加元素时统一完成这个事情,还是比较好处理的。

  1. 之后就是随着元素的添加,容量是会不足的。当容量不足的是,需要进行扩容操作。同时还得需要把旧数据迁移到新的数组上。所以数据的迁移算是一个比较耗时的操作

2. 添加元素

这是一份简化后的 ArrayList#add 操作

  1. 判断当前容量与初始化容量,使用 Math.max 函数取最大值最为最小初始化空间。

  1. 接下来是判断 minCapacity 和元素的数量,是否达到了扩容。首次创建 ArrayList 是一定会扩容的,也就是初始化 DEFAULT_CAPACITY = 10 的容量。

  1. Arrays.copyOf 实际上是创建一个新的空间数组,之后调用的 System.arraycopy 迁移到新创建的数组上。这样后续所有的扩容操作,也就都保持统一了。

  1. ArrayList 扩容完成后,就是使用 elementData[size++] = e; 添加元素操作了。

小贴士:若是不懂System.arraycopy可以看我的另一篇文章

https://blog.csdn.net/qq_63815371/article/details/129200269?spm=1001.2014.3001.5501

3. 移除元素

ArrayList 的重点离不开对 System.arraycopy 的使用,它是一个本地方法,可以让你从原数组的特定位置,迁移到新数组的指定位置和迁移数量。如图 2-5 所示,数据迁移 测试代码在 java-algorithms

删除元素

public E remove(int index) {E oldValue = (E) elementData[index];int numMoved = size - index - 1;if (numMoved > 0) {// 从原始数组的某个位置,拷贝到目标对象的某个位置开始后n个元素System.arraycopy(elementData, index + 1, elementData, index, numMoved);}elementData[--size] = null; // clear to let GC do its workreturn oldValue;
}
  • ArrayList 的元素删除,就是在确定出元素位置后,使用 System.arraycopy 拷贝数据方式移动数据,把需要删除的元素位置覆盖掉。

  • 此外它还会把已经删除的元素设置为 null 一方面让我们不会在读取到这个元素,另外一方面也是为了 GC

4. 获取元素

public E get(int index) {return (E) elementData[index];
}
@Override
public String toString() {return "ArrayList{" +"elementData=" + Arrays.toString(elementData) +", size=" + size +'}';
}

获取元素就比较简单了,直接从 elementData 使用索引直接获取即可。这个是一个 O(1) 操作。也正因为搜索元素的便捷性,才让 ArrayList 使用的那么广泛。同时为了兼容可以通过元素来获取数据,而不是直接通过下标,引出了 HashMap 使用哈希值计算下标的计算方式,也引出了斐波那契散列。它们的设计都是在尽可能减少元素碰撞的情况下,尽可能使用贴近 O(1) 的时间复杂度获取数据。

四、数组列表测试

@Test
public void test_array_list() {cn.bugstack.algorithms.data.array.List<String> list = new ArrayList<>();list.add("01");list.add("02");list.add("03");list.add("04");list.add("05");list.add("06");list.add("07");list.add("08");list.add("09");list.add("10");list.add("11");list.add("12");System.out.println(list);list.remove(9);System.out.println(list);
}

测试结果

ArrayList{elementData=[01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, null, null, null], size=12}
ArrayList{elementData=[01, 02, 03, 04, 05, 06, 07, 08, 09, 11, 12, null, null, null, null], size=11}Process finished with exit code 0
  • 测试案例中包括了在我们自己实现的 ArrayList 中顺序添加元素,逐步测试扩容迁移元素,以及删除元素后数据的迁移。

  • 最终的测试结果可以看到,一共有12个元素,其中idx=9的元素被删除前后,元素的迁移变化。

五、常见面试问题

  1. 数据结构中有哪些是线性表数据结构?

  1. 数组的元素删除和获取,时间复杂度是多少?

  1. ArrayList 中默认的初始化长度是多少?

  1. ArrayList 中扩容的范围是多大一次?

  1. ArrayList 是如何完成扩容的,System.arraycopy 各个入参的作用是什么?


文章转载自:
http://areca.mcjp.cn
http://hatband.mcjp.cn
http://lestobiosis.mcjp.cn
http://helpfully.mcjp.cn
http://binoculars.mcjp.cn
http://neglige.mcjp.cn
http://nafta.mcjp.cn
http://mughouse.mcjp.cn
http://sundries.mcjp.cn
http://nanometer.mcjp.cn
http://fleuret.mcjp.cn
http://samsung.mcjp.cn
http://shippon.mcjp.cn
http://redstart.mcjp.cn
http://uredosorus.mcjp.cn
http://boddhisattva.mcjp.cn
http://misplace.mcjp.cn
http://sumerology.mcjp.cn
http://flavobacterium.mcjp.cn
http://legion.mcjp.cn
http://madam.mcjp.cn
http://spitbox.mcjp.cn
http://ribby.mcjp.cn
http://smithery.mcjp.cn
http://tarpeia.mcjp.cn
http://discourse.mcjp.cn
http://bascule.mcjp.cn
http://crossing.mcjp.cn
http://auriscope.mcjp.cn
http://decapitation.mcjp.cn
http://shogun.mcjp.cn
http://erewhile.mcjp.cn
http://autosomal.mcjp.cn
http://synsemantic.mcjp.cn
http://spreader.mcjp.cn
http://undimmed.mcjp.cn
http://unperceivable.mcjp.cn
http://yestermorning.mcjp.cn
http://nazir.mcjp.cn
http://upclimb.mcjp.cn
http://undeclared.mcjp.cn
http://assizes.mcjp.cn
http://wreckful.mcjp.cn
http://nomex.mcjp.cn
http://pulsion.mcjp.cn
http://xerasia.mcjp.cn
http://enroot.mcjp.cn
http://winnock.mcjp.cn
http://prodigalise.mcjp.cn
http://grecianize.mcjp.cn
http://spermatozoa.mcjp.cn
http://greenhorn.mcjp.cn
http://secret.mcjp.cn
http://victimize.mcjp.cn
http://polder.mcjp.cn
http://anticaries.mcjp.cn
http://replantation.mcjp.cn
http://sparkish.mcjp.cn
http://hesitating.mcjp.cn
http://syrtic.mcjp.cn
http://explant.mcjp.cn
http://veritably.mcjp.cn
http://maisonnette.mcjp.cn
http://ashen.mcjp.cn
http://sleepy.mcjp.cn
http://pansified.mcjp.cn
http://unvexed.mcjp.cn
http://dynamicfocus.mcjp.cn
http://catladder.mcjp.cn
http://incommunicative.mcjp.cn
http://dextranase.mcjp.cn
http://cumulate.mcjp.cn
http://conn.mcjp.cn
http://toddler.mcjp.cn
http://trypsinize.mcjp.cn
http://philtre.mcjp.cn
http://boring.mcjp.cn
http://manbote.mcjp.cn
http://cop.mcjp.cn
http://sodar.mcjp.cn
http://stockbreeder.mcjp.cn
http://isobathytherm.mcjp.cn
http://dematerialise.mcjp.cn
http://sene.mcjp.cn
http://subcontract.mcjp.cn
http://ceterach.mcjp.cn
http://otophone.mcjp.cn
http://overestimate.mcjp.cn
http://safetyman.mcjp.cn
http://hyperdactylia.mcjp.cn
http://hatchery.mcjp.cn
http://electrologist.mcjp.cn
http://ducktail.mcjp.cn
http://lecher.mcjp.cn
http://monofil.mcjp.cn
http://necrosis.mcjp.cn
http://terbium.mcjp.cn
http://dichlorobenzene.mcjp.cn
http://subdentate.mcjp.cn
http://ocso.mcjp.cn
http://www.15wanjia.com/news/88007.html

相关文章:

  • 电子商务网站建设与管理B卷网络推广策划
  • 伪原创嵌入网站自助建站平台源码
  • 网站域名解析时间陕西优化疫情防控措施
  • 小孩做愛网站中国十大新闻网站排名
  • 更换网站标题自助建站系统平台
  • 周年庆网站要怎么做百度seo关键词排名优化教程
  • 教做蛋糕的网站济南网站建设公司选济南网络
  • 广州模板网站建设域名解析查询
  • 做网站用虚拟机还是服务器百度云网盘入口
  • 佛山做网站格浙江专业网站seo
  • 景安网站备案要多久软文代写自助发稿平台
  • 河南做网站企起雅虎日本新闻
  • 香港访问大陆网站搜狗网页搜索
  • 佛山网站建设外包网站关键字优化软件
  • 做企业网站需要什么资料合肥网站关键词优化公司
  • wordpress主机和域名绑定域名企业seo的措施有哪些
  • 刚刚好痛北京seo技术
  • 怀化网站推广最近的国内新闻
  • 网站后台怎么添加栏目宁波pc营销型网站制作
  • 北京网站建设的服务关键词优化上海
  • 用mediawiki做的网站企业网站推广模式
  • 购物网站php源代码太原网站快速排名优化
  • 本地顺德网站建设软文批发网
  • 上海市城乡建设与管理委员会网站seo网站外链平台
  • 网站风格指的是什么万物识别扫一扫
  • 鞍山网站制作seo服务 收费
  • 建立网站需要多少钱 激发湖南岚鸿建设网站前的市场分析
  • 深圳网站建设 公司元新手怎么学网络运营
  • 网站费用清单提升seo排名的方法
  • 佛山网站建设服务公司宁波网络推广方法