首页 > 其他分享 >5.数组

5.数组

时间:2024-09-05 19:49:09浏览次数:1  
标签:... 元素 数据类型 数组名 内存 数组

MODULE 5 数组

1.数组的特点以及定义

2.数组的操作(存数据,取数据,遍历数据)

3.二维数组(定义,存,取,遍历)

4.知道内存中的:堆,栈

一、数组的定义

1.问题:如果我们想存储一个数组,我们可以使用变量,但是变量一次只能存储一 个数据,所以我们想能不能一次存储多个数据

2.数组概述:是一个容器,数组本身属于引用数据类型

3.作用:一次存储多个数据

4.特点:

(1)既可以存储基本类型的数据,还能存储应用数据类型

(2)定长(定义数组长度为多长,最多能存储多少个数组)

5.定义:

(1)动态初始化:在定义数组的时候,我们没有给具体的数据,只指定了长 度

数据类型【】 数组名 = new 数据类型【长度】

数据类型 数组名【】 = new 数据类型【长度】

各部分解释:

等号左边的数据类型:规定了数组中只能存储什么类型的数据

【】:代表的是数组,一个【】代表一维数组,两个【】【】代表二维 数组

数组名;自己取的名字,遵循小驼峰式

new:代表的是创建数组

等号右边的数据类型:要和等号左边的数据类型一致

【长度】:指定数组的长度,规定了数组最多能存多少个数据

(2)静态初始化:在定义数组的时候,我们直接给了数据

数组类型【】 数组名 = new 数据类型【】{元素1,元素2...} -> 不 推荐使用

数组类型 数组名【】 = new 数据类型【】{元素1,元素2...} -> 不 推荐使用

(3)简化的静态初始化:

数据类型【】 数组名 = {元素1,元素2...} -> 推荐使用

6.动静初始化的区别:

(1)动态初始化:定义的时候只指出了长度,没有存具体的数据当只知道长 度,但不知道具体存什么数据的时候可以使用动态初始化

(2)静态初始化:定义的时候就知道存什么数据了

二、数组的操作

(一)获取数组的长度

1.格式:

数组名.length

2.注意:

length后面不需要带小括号,因为length不是数组中的方法,而是一个属性

(二)索引

1.概述:元素在数组中存储的位置(编号,下标)

2.特点:

(1)索引唯一

(2)索引都是从0开始的,最大索引是数组长度-1

3.索引的作用:

我们将来操作元素,必须通过索引来操作

存数据,要指定索引

取数据,要指定索引

查数据,要指定索引

(三)存储元素

1.格式:

数组名【索引值】 = 值 -> 将符号右边的数据放到数据指定的索引位置上

(四)获取元素

1.格式:

数组名【索引值】

2.细节说明:

(1)直接输出数组名,会输出数组在内存中的地址值

(2)地址值:数组在内存中的一个身份证号,唯一的标识,我们可以通过这 个唯一标识到内存中能找到这个数组,从而操作这个数组中的数据

(3)如果数组中没有存数据,那么直接获取也能获取出来一些数据(默认值)

整数:0

小数:0.0

字符:’\u0000’ -> 对应的int值是0

布尔:false

引用:null

(五)遍历数组

1.遍历:将元素从数组中一个一个的获取出来(循环)

快捷键:数组名.fori

三、操作数组时两个常见问题

(一)数组索引越界异常 ArrayIndexOutOfBoundsException

1.原因:

操作索引超过数组索引范围

(二)空指针异常 NullPinterException

1.原因:

当一个对象为null时,再调用此对象中的其他成员

四、内存图

1.内存:可以理解为“内存条”,所有的软件,程序运行起来都会进入到内存中, 占用内存,在java的世界中,将内存划分成了5块

2.分为哪五块:

(1)栈(Stack)

主要运行方法,方法的运行都会进栈内存运行,运行完毕之后,需要“弹 栈”,为了腾空间

(2)堆(Heap)

保存的是对象、数组,每new一次,都回在堆内存中开辟空间,并为这个 空间分配一个地址值,堆内存中的数据都是有默认值的

整数:0

小数:0.0

字符:‘\u0000’

布尔:false

引用:null

(3)方法区(Method Area)

代码的预备区,记录了类的信息以及方法的信息,方法中主要保存class 文件以及其中的信息,代码运行之前,需要先进内存->方法区

(4)本地方法栈(Native Method Stack):专门运行native方法(本地方法)

本地方法可以理解为堆对java功能的补充

有很多功能,java实现不了,所以需要依靠本地方法完成(c语言编写)

(5)寄存器(pc register):和cpu有关

(一)一个数组的内存图

(二)两个数组的内存图

我们创建了两个数组,在堆内存中开辟了两个不同的空间,此时修改一个空间中的 数据不会影响到另一个空间的数据

(三)两个数组指向同一内存空间

arr2不是new出来的,是arr1直接赋值给的,arr1在内存中保存的是地址值,给 了arr2,那么arr2的地址值和arr1一样,所以此时arr1和arr2指向了堆内存 中同一片空间(同一个地址值,代表的是同一个数组),此时改变一个数组中的元 素会影响到另外一个数组

五、二维数组

(一)二维数组的定义格式

1.概述:数组中套了多个数组

2定义格式:

(1)动态初始化

数据类型【】【】 数组名 = new 数据类型【m】【n】

数据类型 数组名【】【】 = new 数据类型【m】【n】

数据类型【】 数组名【】 = new 数据类型【m】【n】

m:代表的是二维数组的长度

n:代表的是二维数组中每一个一维数组的长度

数据类型【】【】 数组名 = new数据类型 【m】【】 -> 二维数组中的一 维数组没有被创建

(2)静态初始化

数据类型【】【】 数组名 = new 数据类型【】【】{{元素1,元素2...},{元 素1,元素2...}}

数据类型 数组名【】【】 = new 数据类型【】【】{元素1,元素2...},{元 素1,元素2...}}

数据类型【】 数组名【】 = new 数据类型【】【】{元素1,元素2...},{元 素1,元素2...}}

(3)简化静态初始化

数据类型【】【】 数组名 = {{元素1,元素2...},{元素1,元素2...}}

数据类型 数组名【】【】 = {{元素1,元素2...},{元素1,元素2...}}

数据类型【】 数组名【】 = {{元素1,元素2...},{元素1,元素 2...}}

(二)获取二维数组长度

1.格式:

数组名.length

2.获取每一个一维数组,需要先遍历二维数组,将每一个一维数组遍历出

(三)获取二维数组中的元素

1.格式:

数组名【i】【j】

i:代表的是一维数组在二维数组中索引的位置

J:代表的是元素在一维数组中的索引位置

(四)二维数组中存储元素

1.格式:

数组名【i】【j】 = 值

i:代表的是一维数组在二维数组中索引的位置

J:代表的是元素在一维数组中的索引位置

(五)二维数组的遍历

1.先遍历二维数组,将每一个一维数组遍历出来

2.再遍历每一个一维数组,将元素获取出来

(六)二维数组内存划分

标签:...,元素,数据类型,数组名,内存,数组
From: https://www.cnblogs.com/swh666/p/18394723

相关文章

  • 终于使用c++、结构体,函数实现简单数组元素的插入
    includeusingnamespacestd;//定义结构体structMyArray{intarr[100];//数组,假设最大长度为100intn;//数组当前元素数量};//输入函数voidscanf(MyArray&myArray,int&x,int&y){cin>>myArray.n;for(inti=0;i<myArray.n;i++){cin>>my......
  • 二维数组根据某个字段去重并统计个数
    publicfunctioncensus(){$data=$this->request->post("params/a");//$data=[//['name'=>'Alice','specId'=>25],//['name'......
  • c++遍历数组的多种方式
    方法一:普通的for循环for(inti=0;i<sizeof(a)/sizeof(a[0]);i++){cout<<a[i]<<"";}方法二:指针数组int*p[len];for(inti=0;i<len;i++){p[i]=&a[i];cout<<*p[i];}———————————————......
  • 【C语言】详解数组
    文章目录前言一、数组的概念二、一维数组1.一维数组的创建2.一维数组的初始化3.一维数组的使用4.一维数组在内存中的存储三、二维数组1.二维数组的创建2.二维数组的初始化3.二维数组的使用4.二维数组在内存中的存储前言一、数组的概念(数组是一组相同类型元素......
  • java数组
    数组:是一种容器,可以用来储存同种数据类型的多个值注:数组容器子在存储数据的时候,需要结合隐式转换考虑,数组类型和存储的数据类型需保持一致。初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器的过程地址值:数组的地址值就表示数组在内存中的位置double[]arr1={11,12......
  • 删除有序数组中的重复项 II
    给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。示例1:输入:nums=[1,1,1,2,2,3]输出:5,nums=[1,1,2,2,3]解释:......
  • 34. 在排序数组中查找元素的第一个和最后一个位置
    这题还蛮有意思的,看了下解析,分成两部分分开来求解。左右边界都是普通的二分查找算法,重点就是当等于的时候的处理,左边界函数等于目标值的时候,要记录当前mid的值作为边界,同时区间要向左移。反过来,右边界的话,区间要向右移动。记得记录相等时候的mid值,最后一次相等记录的值也就是这......
  • 初次部分使用c++语言无意发现个数组元素查找的代码
    includeusingnamespacestd;//定义结构体structMyArray{intarr[100];//数组,假设最大长度为100intsize;//数组当前元素数量};//输入函数,修改数组内容voidscanf(MyArray&myArray){for(inti=0;i<myArray.size;i++){cin>>myArray.arr[i];//键盘......
  • LeetCode刷题—数组
    一:数组操作1、数组:在连续的内存空间当中;存储一组相同类型的元素2、元素和索引:数组的索引下标从0开始3、数组的访问和数组的搜索(1)数组的访问a=[1,2,3]a[1]=2#数组的访问;通过下标索引进行访问(2)数组的搜索a=[1,2,3]foriina:print(i)4、数组的四种方法访问0(1)......
  • 2024-09-04:用go语言,给定一个长度为n的数组 happiness,表示每个孩子的幸福值,以及一个正
    2024-09-04:用go语言,给定一个长度为n的数组happiness,表示每个孩子的幸福值,以及一个正整数k,我们需要从这n个孩子中选出k个孩子。在筛选过程中,每轮选择一个孩子时,所有尚未选中的孩子的幸福值都会减少1。需要注意的是,幸福值不能降低到负数,只有在其为正数时才能减少。我们的目标是......