您现在的位置是:热点 >>正文
数组,你不一定了解的全面
热点81636817人已围观
简介...
在上一章节中已经对数据结构的基本概念有了了解,主要就是数据结构研究的三个方面(逻辑结构、存储结构、算法)。还有两个重要的词汇:时间效率和空间效率。这一节开始了解最基本的数据结构-数组。
一、数组的基本概念
1、什么是数组?
在平时使用最多的恐怕就是数组了吧,
它是使用最广泛的一种数据结构,它是相同数据类型(可以是基本类型也可以是自定义类型)的数组元素按一定顺序排列的集合,它们在内存中按照这个先后顺序连续存放在一起。有一维数组,二维数组,多维数组。
通俗的理解就是我们一般把一群羊或者一群牛放在一个圈里面,这个圈就相当于数组容器,每一个羊相当于一个元素。
以上这个概念需要知道这几个词汇:相同数据类型、一定顺序排列、集合、内存先后存放。
2、如何声明一个数组
从标题就可以看到,声明和创建一个数组是两个不同的,你过程。声明的作用就好像是告诉别人我要去洗澡,创建的作用就好像是我真正的去洗澡了(比喻不当哈哈)。那如何声明数组呢?
int[] students ; int students [];
从上面我们看到这里有两种方式,但一般推荐第一种。毕竟第一种看起来可读性更好一点。
3、如何创建一个数组
在我们知道不一了如何声明数组之后,接下来就是我们如何创建一个数组。不同的语言创建一个数组的方式还是不一样的,但是大体上一样,这里给出java的几种方式。
//第一种: int [] students = new int[50]; //第二种: String [] 定了;colors = {"red","blue","black"};
从上面可以发现创建一个数组如此简单,别急,这三种方式里面其实还是有很多知识点需要掌握的。其实数组的创建其中有一个环节叫做数组的初始化。举个例子,我创建了一个数组,但是一开始数组容器里面可能还没有这些值。那什么时候才有了这些值呢?解的也就是系统什么时候把我声明的那些red、blue等等装到数组容器里面的呢?这个过程就是数组的初始化。数组是如何初始化的呢?
数组的初始化分为静态初始化、动态初始化:
静态初始化:数组在初始化时由程序员显式指定每个数组元素的初始值。而数组长度由系统决定。在上面创建数组的那三种方式中,第三种就是静态初始化。第二种也是,但是属于静态初始化的简化方式。 动态初始化:动全面态初始化时则必须指定元素个数。动态初始化时数组元素个数未知因此必须指定。上面第一种就是。
4、数组的分类
可能看到这个标题有一个疑问,数组还有分类吗?不就是把相同类型的元素放在一起嘛。其实不然。下面给你好好的分一下类:
**按照是否有序分:**有序数组和无序数组。
按照数组能否扩容分:静态数组和动态数组。
先来看静态数组:在编译期间在栈中分配好内存的数组,在运行期间数组不能改变存储空间,运行后由系统自动释放。
再来看动态数组:动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆(heap)上分配(即动态分配)的。是通过执行代码而为其分配存储空间。当程序执行到这些语句时,才为其分配。程序员自己负责释放,你内存。
java中动态数组的原理
现有一个数组:
int [] data = new int[5];
该数组已经无法继续添加元素了,所以我们再初始化一个新的数组,其容量为10,即数组arr容量的2倍:int [] newData = new int [10];
然后将原数组的所有元素全部都赋值给新的数组。
再将原数组的引用 arr指向 新的数组。
静态数组和动态数组的比较:
对于静态数组,其创建非不一常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则严重会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。
二、数组的特点
在上面掌握了其基本概念之后,再来看一下数组有什么特点,数组的特点也是根据其分类来的,比如说有序数组其特点肯定就是有序,我们方便查找数据,定了无序的我们方面插入删除数据这些。所以这里讲的特点是所有数组共有的特点,也就是一般性特点:又回到了之前发过的文章,特点就是来看时间效率和空间效率的。
1.数组的长度固定的,超过长度时,只能创建一个新的数组,并把旧的数组的值传进去方可;
2.数组的存储类型是单一的,同一数组只能存储同一数据类型的数据。
3.数组只能通过下标来访问数据
三、数组的使用场景
数组较容器,最解的大的优点就是效率。在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式,数组就是一个简单的线性序列,这使得元素访问非常快速, 数组的优点是效率高,但为此,所付出的代价就是数组对象的大小被固定。这也使得在工作中,数组并不实用。我们应该优选java中的容器,而不是数组。
四、数组的底层实现
这里的底层实现也是相比较于java语言来说的,比如在以后的文全面章里面,像链表这样的数据结构我也会配合Java中链表实现的容器来配合着说。
Java提供了很棒的集合API和集合类如:ArrayList、HashMap,他们内部都是基于数组。java如果程序尝试访问无效的数组索引的话jvm会抛出ArrayIndexOutOfBoundException。
Java语言中,数组的实现原理是什么?
这个涉及到编译原理的问题,我数组只能说,这是一个编译规范。在规范中比如:int[]中的int告诉计算机这是一个整型数据,[]告诉计算机这是一个连续存储的内存地址空间,简单点说一个连续数据的存储空间就是数组,数组只是一个名称!!数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象。
以HotSpot VM为例,答案是在数组对象的对象头里有一个length字段,记录数组长度。arr,你aylength字节码的实现只要去读那个_length字段即可。JVM 中数组对象是一种特殊的对象,它的Object Header 比普通对象多了一个word 来存储数组的长度,length 会编译成对应的字节码读取这个field 就可以了。
Tags:
相关文章
云安全日报210923:思科IOS XE操作系统发现远程代码执行漏洞,需要尽快升级
热点Cisco IOS和IOS XE是思科(Cisco)公司旗下路由器和交换机等网络设备广泛采用的互联网操作系统。9月22日,思科发布了安全更新,修复了Cisco IOS XE操作系统中发现的远程代码执行...
【热点】
阅读更多网宿科技入选“2022年上海市新型数据中心创新发展案例”
热点3月20日消息,据上海市通信学会微信公众号消息,上海市通信学会正式公布“2022 年上海市新型数据中心创新发展案例名单”,网宿科技嘉定云计算数据中心获评“上海市新型数据中心创新发展案例(高能效类别)”...
【热点】
阅读更多Meta重磅发布代码世界模型,AI编程将进入新纪元!
热点今天,该公司正式发布了一款名为 “代码世界模型”(Code World Model,简称 CWM)的大型语言模型。这一创新性产品旨在提升 AI 的代码生成能力,利用 “世界模型” 概念为编程任务带来全...
【热点】
阅读更多
热门文章
最新文章
友情链接
- 标签: 康师傅
- https://www.world-architects.com/en/search?term=谷歌快排操作流程【tg:seogoogle987】,vdX
- https://www.tycoonstory.com/?s=谷歌快排操作流程【tg:seogoogle987】,ezT
- https://www.tombow.com/en/search/谷歌快排操作流程【tg:seogoogle987】,NSN
- https://www.msrenewal.com/search/谷歌快排操作流程【tg:seogoogle987】,U6I
- https://www.whatsonstage.com/search?cat=64&term=谷歌快排操作流程【tg:seogoogle987】,ij3
- https://www.lechzuers.com/de/search?cat=163&q=谷歌快排操作流程【tg:seogoogle987】,S76
- https://www.rockngem.com/?action=CHECK&s=谷歌快排操作流程【tg:seogoogle987】,Fvc
- https://www.losgatoschamber.com/list/search?action=SEARCH&q=谷歌快排操作流程【tg:seogoogle987】,Fhc
- https://yscc1986.net/search/谷歌快排操作流程【tg:seogoogle987】tmR
- https://www.mynextmove.org/find/search?s=谷歌快排操作流程【tg:seogoogle987】,goz
- https://www.merchbar.com/search?q=谷歌快排操作流程【tg:seogoogle987】,yKb
- https://www.southmeadows.co.uk/2019/07/?s=谷歌快排操作流程【tg:seogoogle987】,WJ8
- https://www.vocabulary.com/dictionary/谷歌快排操作流程【tg:seogoogle987】,iNC
- https://www.lezhin.com/ko/tags/谷歌快排操作流程【tg:seogoogle987】,JSD
- https://www.ncetm.org.uk/search?action=CHECK&q=谷歌快排操作流程【tg:seogoogle987】,g1n
- https://www.abbreviations.com/谷歌快排操作流程【tg:seogoogle987】CkJ
- https://wydden.com/?ID=r8w9WMSKWkOcmiaFWaUv0dzMdqZWfKtF&s=谷歌快排操作流程【tg:seogoogle987】,BGS
- https://www.remit.co.jp/zh/?s=谷歌快排操作流程【tg:seogoogle987】,2y2
- https://www.mesec.cz/vyhledavani/?qs=谷歌快排操作流程【tg:seogoogle987】,8yX
- https://www.remit.co.jp/vi/?s=谷歌快排操作流程【tg:seogoogle987】L35
- https://www.tcv.org.uk/search/谷歌快排操作流程【tg:seogoogle987】,GwC
- https://www.safetv.go.kr/base/search/view?searchWord=谷歌快排操作流程【tg:seogoogle987】5W1
- https://www.silentiumpc.com/en/search/谷歌快排操作流程【tg:seogoogle987】,Xtx
- https://www.wattpad.com/search/谷歌快排操作流程【tg:seogoogle987】ksl
- https://www.wmfe.org/?s=谷歌快排操作流程【tg:seogoogle987】,pmp
- https://www.teacherspayteachers.com/Browse/Search:谷歌快排操作流程【tg:seogoogle987】,d86
- https://www.sbaad.no/search/谷歌快排操作流程【tg:seogoogle987】,3Jm
- https://www.spoiledsweetboutique.com/search/谷歌快排操作流程【tg:seogoogle987】,i3n
- https://www.lauben.com/en/?action=SEARCH&s=谷歌快排操作流程【tg:seogoogle987】,xmq
- https://www.teacherspayteachers.com/Browse/Price-Range/Free/Search:谷歌快排操作流程【tg:seogoogle987】,0AE
- https://www.vet-direct.com/search?cat=72&term=谷歌快排操作流程【tg:seogoogle987】,E1B
- https://www.thedp.com/page/search?q=谷歌快排操作流程【tg:seogoogle987】,ugT
- https://www.nss.nhs.scot/search?q=谷歌快排操作流程【tg:seogoogle987】,kso
- https://store.line.me/search/sticker/ja?q=谷歌快排操作流程【tg:seogoogle987】B8v
- https://www.prattlibrary.org/search?q=谷歌快排操作流程【tg:seogoogle987】,5AT
- https://www.xvideos.com/tags/谷歌快排操作流程【tg:seogoogle987】,u9M
- https://www.zalora.sg/catalog/?cat=112&q=谷歌快排操作流程【tg:seogoogle987】,KeP
- https://www.tahiti-infos.com/search/谷歌快排操作流程【tg:seogoogle987】,6Hv
- https://yokohama-oht.com/?action=CHECK&s=谷歌快排操作流程【tg:seogoogle987】,jZq
- https://www.vivaraise.fr/catalogsearch/result/?q=谷歌快排操作流程【tg:seogoogle987】,v7q
- https://search.danawa.com/dsearch.php?query=谷歌快排操作流程【tg:seogoogle987】vAk
- https://www.simcoemuskokahealth.org/SearchResults.aspx?SearchQuery=谷歌快排操作流程【tg:seogoogle987】,ACR
- https://www.mygrandma.com/Items.aspx?search=谷歌快排操作流程【tg:seogoogle987】,d0K
- https://www.maafushidive.com?collections?vendors?q=谷歌快排操作流程【tg:seogoogle987】,aKK
- https://www.woorden.org/spreekwoord.php?woord=谷歌快排操作流程【tg:seogoogle987】,OHU
- https://www.mi.com/search?keyword=谷歌快排操作流程【tg:seogoogle987】,itI
- https://www.solerpalau.com/en-en/catalogsearch/result/?q=谷歌快排操作流程【tg:seogoogle987】,rLD
- https://www.lyrics.com/lyrics/kkk3谷歌快排操作流程【tg:seogoogle987】,r5s
- https://www.seagrant.wisc.edu/?page=63&s=谷歌快排操作流程【tg:seogoogle987】,Sby
- https://www.ucycle.com/search/=谷歌快排操作流程【tg:seogoogle987】,Gop