推荐关注:

狼爹狐子猎豹娘数组,你不一定了解的全面

收集整理:九站网 更新时间:2021-02-26 17:25 文章来源:51cto

狼爹狐子猎豹娘在上一章节中已经对数据结构的基本概念有了了解,主要就是数据结构研究的三个方面(逻辑结构、存储结构、算法)。还有两个重要的词汇:时间效率和空间效率。这一节开始了解

原标题:《数组,你不一定了解的全面》

狼爹狐子猎豹娘在上一章节中已经对数据结构的基本概念有了了解,主要就是数据结构研究的三个方面(逻辑结构、存储结构、算法)。还有两个重要的词汇:时间效率和空间效率。这一节开始了解最基本的数据结构-数组。

狼爹狐子猎豹娘一、数组的基本概念

狼爹狐子猎豹娘1、什么是数组?

狼爹狐子猎豹娘在平时使用最多的恐怕就是数组了吧,

狼爹狐子猎豹娘它是使用最广泛的一种数据结构,它是相同数据类型(可以是基本类型也可以是自定义类型)的元素按一定顺序排列的集合,它们在内存中按照这个先后顺序连续存放在一起。有一维数组,二维数组,多维数组。

狼爹狐子猎豹娘通俗的理解就是我们一般把一群羊或者一群牛放在一个圈里面,这个圈就相当于数组容器,每一个羊相当于一个元素。

狼爹狐子猎豹娘以上这个概念需要知道这几个词汇:相同数据类型、一定顺序排列、集合、内存先后存放。

狼爹狐子猎豹娘2、如何声明一个数组

狼爹狐子猎豹娘从标题就可以看到,声明和创建一个数组是两个不同的过程。声明的作用就好像是告诉别人我要去洗澡,创建的作用就好像是我真正的去洗澡了(比喻不当哈哈)。那如何声明数组呢?

狼爹狐子猎豹娘int[]students;intstudents[];

从上面我们看到这里有两种方式,但一般推荐第一种。毕竟第一种看起来可读X更好一点。

3、如何创建一个数组

在我们知道了如何声明数组之后,接下来就是我们如何创建一个数组。不同的语言创建一个数组的方式还是不一样的,但是大体上一样,这里给出java的几种方式。

//第一种:int[]students=newint[50];//第二种:String[]colors={"red","blue","black"};

从上面可以发现创建一个数组如此简单,别急,这三种方式里面其实还是有很多知识点需要掌握的。其实数组的创建其中有一个环节叫做数组的初始化。举个例子,我创建了一个数组,但是一开始数组容器里面可能还没有这些值。那什么时候才有了这些值呢?也就是系统什么时候把我声明的那些red、blue等等装到数组容器里面的呢?这个过程就是数组的初始化。数组是如何初始化的呢?

数组的初始化分为静态初始化、动态初始化:

静态初始化:数组在初始化时由程序员显式指定每个数组元素的初始值。而数组长度由系统决定。在上面创建数组的那三种方式中,第三种就是静态初始化。第二种也是,但是属于静态初始化的简化方式。动态初始化:动态初始化时则必须指定元素个数。动态初始化时数组元素个数未知因此必须指定。上面第一种就是。

4、数组的分类

可能看到这个标题有一个疑问,数组还有分类吗?不就是把相同类型的元素放在一起嘛。其实不然。下面给你好好的分一下类:

**按照是否有序分:**有序数组和无序数组。

按照数组能否扩容分:静态数组和动态数组。

先来看静态数组:在编译期间在栈中分配好内存的数组,在运行期间不能改变存储空间,运行后由系统自动释放。

再来看动态数组:动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆(heap)上分配(即动态分配)的。是通过执行*码而为其分配存储空间。当程序执行到这些语句时,才为其分配。程序员自己负责释放内存。

java中动态数组的原理

现有一个数组:

int[]data=newint[5];

该数组已经无法继续添加元素了,所以我们再初始化一个新的数组,其容量为10,即数组arr容量的2倍:int[]newData=newint[10];

然后将原数组的所有元素全部都赋值给新的数组。

再将原数组的引用arr指向新的数组。

静态数组和动态数组的比较:

对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则严重会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。

二、数组的特点

在上面掌握了其基本概念之后,再来看一下数组有什么特点,数组的特点也是根据其分类来的,比如说有序数组其特点肯定就是有序,我们方便查找数据,无序的我们方面插入删除数据这些。所以这里讲的特点是所有数组共有的特点,也就是一般X特点:又回到了之前发过的文章,特点就是来看时间效率和空间效率的。

1.数组的长度固定的,超过长度时,只能创建一个新的数组,并把旧的数组的值传进去方可;

2.数组的存储类型是单一的,同一数组只能存储同一数据类型的数据。

3.数组只能通过下标来访问数据

三、数组的使用场景

数组较容器,最大的优点就是效率。在JXa中,数组是一种效率最高的存储和随机访问对象引用序列的方式,数组就是一个简单的线X序列,这使得元素访问非常快速,数组的优点是效率高,但为此,所付出的*价就是数组对象的大小被固定。这也使得在工作中,数组并不实用。我们应该优选java中的容器,而不是数组。

四、数组的底层实现

这里的底层实现也是相比较于java语言来说的,比如在以后的文章里面,像链表这样的数据结构我也会配合JXa中链表实现的容器来配合着说。

JXa提供了很棒的集合API和集合类如:ArrayList、H..ashMap,他们内部都是基于数组。java如果程序尝试访问无效的数组索引的话jvm会抛出ArrayIndexOutOfBoundException。

JXa语言中,数组的实现原理是什么?

这个涉及到编译原理的问题,我只能说,这是一个编译规范。在规范中比如:int[]中的int告诉计算机这是一个整型数据,[]告诉计算机这是一个连续存储的内存地址空间,简单点说一个连续数据的存储空间就是数组,数组只是一个名称!!数组在JXa里是一种特殊类型,有别于普通的“类的实例”的对象。

以H..otSpotVM为例,答案是在数组对象的对象头里有一个length字段,记录数组长度。arraylength字节码的实现只要去读那个_length字段即可。JVM中数组对象是一种特殊的对象,它的ObjectH..eader比普通对象多了一个word来存储数组的长度,length会编译成对应的字节码读取这个field就可以了。

狼爹狐子猎豹娘在上一章节中已经对数据结构的基本概念有了了解,主要就是数据结构研究的三个方面(逻辑结构、存储结构、算法...

阅读全文

띲띪띺狼爹狐子猎豹娘数组,你不一定了解的全面》一文由九站智能AI收集整理,不代表本站支持其观点
如无意侵犯您的权益,请及时与我们联系,我们将在第一时间处理您的诉求。

热门频道推荐 建站经验 策划盈利 搜索优化 业界动态 境外动态 网络评论 传媒播报 产品运营 交互设计 网站推广 免费资源 网络游戏 网页游戏 电商要闻 电商分析 移动通讯 数码咨讯 移动应用 数码评测 创业模式 创业资本 创业点评 创业经验 电商淘客 电商微商

九站草根门户 服务草根站长 集结网络群体的力量!
免责申明:本站为非盈利性网站,不刊登或转载任何完整的新闻内容,其版权归原作者所有。如无意侵犯您的权益,请及时与我们联系,我们将在第一时间处理您的诉求。
PHP程序订制开发,九站系统销售联系QQ 1142088012 蜀ICP备06021074号-10 Copyright 2011-2022 © Www.O9z.Net .All Rights Reserved