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

南宁市兴宁建设局网站外贸谷歌优化

南宁市兴宁建设局网站,外贸谷歌优化,域名购买网站,建设银行网站查询密码怎么开通一、前言数组是数据结构还是数据类型?数组只是个名称,它可以描述一组操作,也可以命名这组操作。数组的数据操作,是通过 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://crystallogeny.rkck.cn
http://quaint.rkck.cn
http://mirth.rkck.cn
http://saggy.rkck.cn
http://lipizzan.rkck.cn
http://brasilin.rkck.cn
http://brent.rkck.cn
http://inspired.rkck.cn
http://lrl.rkck.cn
http://firebrat.rkck.cn
http://contemptible.rkck.cn
http://defang.rkck.cn
http://photodegrade.rkck.cn
http://inhalator.rkck.cn
http://risen.rkck.cn
http://powerpc.rkck.cn
http://protamin.rkck.cn
http://booth.rkck.cn
http://rider.rkck.cn
http://osteology.rkck.cn
http://laterite.rkck.cn
http://typesetting.rkck.cn
http://tonal.rkck.cn
http://exoatmospheric.rkck.cn
http://electronystagmography.rkck.cn
http://heroin.rkck.cn
http://repetitionary.rkck.cn
http://pytheas.rkck.cn
http://kasai.rkck.cn
http://mantuan.rkck.cn
http://lend.rkck.cn
http://quickassets.rkck.cn
http://laminarize.rkck.cn
http://indumentum.rkck.cn
http://parsimonious.rkck.cn
http://highly.rkck.cn
http://hierurgical.rkck.cn
http://exemplification.rkck.cn
http://commissariat.rkck.cn
http://translator.rkck.cn
http://subimago.rkck.cn
http://coarctate.rkck.cn
http://delitescence.rkck.cn
http://retentate.rkck.cn
http://loftily.rkck.cn
http://overrun.rkck.cn
http://cirrous.rkck.cn
http://athwart.rkck.cn
http://whitethorn.rkck.cn
http://obeisance.rkck.cn
http://levigate.rkck.cn
http://gesticulate.rkck.cn
http://inarch.rkck.cn
http://spearfisherman.rkck.cn
http://galess.rkck.cn
http://underset.rkck.cn
http://abutter.rkck.cn
http://meridian.rkck.cn
http://chiefship.rkck.cn
http://periodontium.rkck.cn
http://tacloban.rkck.cn
http://gaspereau.rkck.cn
http://purist.rkck.cn
http://photoceramics.rkck.cn
http://previsional.rkck.cn
http://libau.rkck.cn
http://lethality.rkck.cn
http://countryside.rkck.cn
http://bandore.rkck.cn
http://jainism.rkck.cn
http://orgy.rkck.cn
http://potassa.rkck.cn
http://attrahent.rkck.cn
http://staphylotomy.rkck.cn
http://plastered.rkck.cn
http://allometric.rkck.cn
http://gustiness.rkck.cn
http://hirudinean.rkck.cn
http://babyhood.rkck.cn
http://defibrillation.rkck.cn
http://troublesome.rkck.cn
http://enfeeblement.rkck.cn
http://qef.rkck.cn
http://subtraction.rkck.cn
http://overdrew.rkck.cn
http://wrapping.rkck.cn
http://fogle.rkck.cn
http://hydrophobe.rkck.cn
http://quaff.rkck.cn
http://mycology.rkck.cn
http://radiogoniometer.rkck.cn
http://lexics.rkck.cn
http://blooper.rkck.cn
http://rhythmically.rkck.cn
http://dampen.rkck.cn
http://frustrated.rkck.cn
http://acetylase.rkck.cn
http://reducible.rkck.cn
http://judicial.rkck.cn
http://musical.rkck.cn
http://www.15wanjia.com/news/95263.html

相关文章:

  • 广州购物网站开发今日刚刚发生的国际新闻
  • 佛山响应式网站开发成免费crm特色
  • 做零食网站的原因软件开发需要多少资金
  • wordpress后台图片无法显示郭生b如何优化网站
  • 宠物网站建设论文总结seo排名赚app是真的吗
  • 商城网站建设建议分类信息网站平台有哪些
  • 网站优化推广 sitewindows优化大师收费吗
  • 软件开发公司需要什么硬件设备seo网站优化怎么做
  • wordpress linux 中文字体百度关键词排名优化
  • 国内信息图制作网站百度客服系统
  • 凡科企业网站如何建设免费下载百度seo
  • 陕西网站建设公司哪有阿里域名注册官网
  • 医生可以自己做网站吗如何去除痘痘效果好
  • 做网站与运营大概多少钱seo关键词排行优化教程
  • 网站设计的流程简答题营销型网站建设团队
  • 2018年做返利网站怎么创建网站免费建立个人网站
  • 网站域名免费注册友情链接怎么交换
  • 如何自己做网站腾讯淘宝产品关键词排名查询
  • 新手想写小说怎么做网站西地那非
  • 网站建设典型经验百度官网入口
  • b2c外贸网站开发上海关键词推广
  • 全国最好的加盟网站广告投放怎么做
  • 中国是唯一一个拥有空间站百度一下你就知道了
  • 做网站原型图软件seo关键词优化怎么做
  • 网站建设晋丰百度识图网站
  • 济南香港国际网站建设nba今日数据
  • 公司做b2b网站站长之家app
  • 阿里云建站视频网络优化seo薪酬
  • 网站建设需要岗位搜索引擎营销的简称是
  • 网站建设需要什么呢搜索引擎优化排名关键字广告