数组(个人复习)

tech2022-12-02  113

文章目录

数组一、概念1.定义2.特点 二、 定义与初始化1.定义格式2.数组初始化(1)动态初始化(2)静态初始化 3.访问数组元素4.遍历数组 三、数组内存图1.概念2.java中内存划分3.数组在内存中的储存(1)一个数组内存图(2)两个数组内存图(3)两个变量指向一个数组 四、数组常见错误1.数组索引越界异常 五、数组排序1.排序算法2.冒泡排序

数组

一、概念

1.定义

数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。

2.特点

数组可以是一维、二维、多维数组。数值数组元素默认值为0,引用元素默认值为null数组索引从0开始,如果有n个元素,数组索引为0-(n-1)数组元素可以是任何类型,包括数组类型数组类型是总Array派生的引用类型

二、 定义与初始化

1.定义格式

格式1:数据类型[] 数组名;(推荐使用)

格式2:数据类型 数组名[];

//数组的定义: 数据类型[] 数组名 int[] aa; //定义了一个int类型的数组——这个数组中只能存放int类型的数据 String[] ss; //定义了一个String[]数组——只能存放String类型的数据 double[] dd; //另一种定义方法(不常用) 为了兼容C语言的写法 int aaa[]; String sss[]; /* int x; System.out.println(x); //变量定义完,不赋值,是不能使用的!!! */

2.数组初始化

就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

注意: Java中的数组必须先初始化,然后才能使用。

(1)动态初始化

格式 数据类型[] 数组名 = new 数据类型[数组长度];

// 数组长度指定后,不能改变 int[] aa = new int[5]; // 初始化数组,并制定数组的长度为5(这个数组中最多可以存放5个int类型数据) String[] ss = new String[10];

(2)静态初始化

格式 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…}; 简化格式 数据类型[] 数组名 = {元素1,元素2,…};

int[] aa = new int[]{4,1,3,8,8,9}; // 创建了一个6个长度的数组,并完成了赋值 String[] ss = new String[]{"aaa","bbb","ccc"}; int[] aaa = {1,2,4,5,8,9}; //创建了一个6个长度的数组,并完成了赋值 String[] sss = {"aaa","bbb","ccc"};

3.访问数组元素

索引 每一个储存到数组的元素,都会自动分配一个编号,这个编号就是数组索引(index)(下标),可以通过数组的索引访问到数组中的元素

格式 数组名[索引]

数组长度属性 每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度 语句为: 数组名.length 属性length的执行结果是数组的长度,int类型结果。 由次可以推断出,数组的最大索引值为数组名.length-1 。

通过索引访问数组中的元素 数组名[索引]=数值,为数组中的元素赋值 变量=数组名[索引],获取出数组中的元素

4.遍历数组

int[] aa = new int[5]; /* aa[0] = 1; aa[1] = 2; aa[2] = 3; aa[3] = 4; aa[4] = 5; */ for(int i=0;i<aa.length;i++){ aa[i]=i+1; } for(int i=0;i<aa.length;i++){ System.out.println(aa[i]); }

三、数组内存图

1.概念

内存是计算机中的重要原件,可以用来给程序临时存储数据。我们编写的程序,必须放进内存中才能运行,运行完毕后会清空内存。 Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

2.java中内存划分

JVM的内存划分: 寄存器,给CPU使用,和我们开发无关。 本地方法栈: JVM在使用操作系统功能的时候使用,和我们开发无关。 方法区: 存储可以运行的class文件。 堆内存: 存储对象或者数组,new来创建的,都存储在堆内存。 方法栈(栈内存): 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。

3.数组在内存中的储存

(1)一个数组内存图

public static void main(String[] args) { int[] arr = new int[3]; System.out.println(arr); }

(2)两个数组内存图

public static void main(String[] args) { int[] arr = new int[3]; int[] arr2 = new int[2]; System.out.println(arr); System.out.println(arr2); }

(3)两个变量指向一个数组

public static void main(String[] args) { // 定义数组,存储3个元素 int[] arr = new int[3]; // 数组索引进行赋值 arr[0] = 5; arr[1] = 6; arr[2] = 7; // 输出3个索引上的元素值 System.out.println(arr[0]);//5 System.out.println(arr[1]);//6 System.out.println(arr[2]);//7 // 定义数组变量arr2,将arr的地址赋值给arr2 int[] arr2 = arr; arr2[1] = 9; System.out.println(arr2[1]);//9 System.out.println(arr[1]);//?9 }

四、数组常见错误

1.数组索引越界异常

public static void main(String[] args) { int[] arr = new int[4]; // 定义一个长度为4的数组 System.out.println("arr[4]=" + arr[4]); // 通过角标4访问数组元素 }

上面运行结果中所提示的错误信息是数组越界异常ArrayIndexOutOfBoundsException,出现这个异常的原因是数组的长度为4,其索引范围为0~3,而上述代码中的第4行代码使用索引4来访问元素时超出了数组的索引范围。

五、数组排序

1.排序算法

2.冒泡排序

思想 相邻两个数进行比较,第一波比较后,最大的数在最后。(每比较完之后,后面的数就减少一个比较 )

for(int k = 0;k<aa.length-1;k++){ for(int i=0;i<aa.length-1-k;i++){ if(aa[i]>aa[i+1]){ //相邻的两个数据比较 ,满足条件就交换顺序 int temp = 0; temp = aa[i]; aa[i] = aa[i+1]; aa[i+1]=temp; } } }
最新回复(0)