欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数组--数组的基本学习

程序员文章站 2022-04-03 16:16:50
...

1 数组基本定义

数组:同一类型数据的集合(也是一个容器,存储多个数据)
格式:

元素类型[] 数组名 = new 元素类型[元素个数或者数组长度];

补充:前面的[]放在数组名前面或后面都可以。
数组使用的核心思想:
1.可以存储多个相同类型的数据
2.可以对每个数据进行编号(索引或下标),从0开始
3.固定长度

// 创建一个长度为3,元素类型为int类型的数组
	// 格式一:
	int[] arr = new int[3];
	// 格式一:数组长度可以为变量
	int a = 3;
	int[] arr1 = new int[a];
	//格式二:创建数组并且进行赋值
	int[] arr2 = new int []{11,22,33};
	//对上述进行简化
	int[] arr3 ={11,22,33};
	//获取数组的长度
	System.out.println(arr3.length);
	//对数组进行遍历
	for(int i=0;i<arr3.length;i++){
		System.out.println(arr3[i]);
	}

输出数组要使用for循环遍历(获取数组中每一个元素)数组。

2 java中的内存区域

栈,堆,方法区,本地方法区,寄存器。
(1)栈:存储的都是局部变量(定义在方法中),自动释放资源
特点:
1)main方法会先压栈,先进后出。
2)一旦变量的生命周期结束,那么该变量就释放。
(2)堆:存储实体(对象)
特点:
1)凡是通过new创建的都是对象,堆内存中变量(引用型变量)有默认值。每new一次就会在堆中开辟一个区域,在内存中引用型变量(栈区)会指向数组(堆区)生成的地址值(二进制格式)。
2)由垃圾回收机制回收资源:当数组在对中生成的地址没有变量指向该地址值时,java就会启动垃圾回收机制,对数组对象进行回收。
int [] arr = new int[3];// 变量arr指向地址值0x0012;
如果不想让引用型变量指向任何内容,则可以赋值为null
arr = null;// 将arr指向null,不再指向任何地址值。此时0x0012没有被引用,java会启动垃圾回收机制回收堆中0x0012开辟的区域。int类型默认值为0,double(float)类型默认值为0.0,boolean类型默认为false,String的默认值为null。
数组--数组的基本学习
上图输出arr[3]结果为0。
相同数据类型之间可以进行赋值,引用类型变量之间可以进行赋值,但是其将右边的地址值赋值给左边的变量。
arr = x;
System.out.println(arr[3]);//结果为90
上述arr = xx;就是将变量arr指向新的地址值0X0015。原来的旧地址值0x0012没有被引用,因此就会被java回收机制回收。

3 数组的两个异常

1)数组下标越界异常
2)空指针异常

 //异常1
	System.out.println(arr[3]);//ArrayIndexOutOfBoundsException:数组下标越界
//异常2
	arr = null;
	System.out.println(arr[0]);//NullPointerException:空指针异常

4 求最值

public class Maximum_value {
//	主方法调用
	public static void main(String[] args) {
		int[] arr = { 2322, 1234, 4, 53, -2, 65 };
		int MAX1 = getMax(arr);
		System.out.println("最大值 为" + MAX1);
		int MAX2 = getMax2(arr);
		System.out.println("最大值 为" + MAX2);
	}
	/*
	 * 功能:获取多个整数中最大值 思路:1.定义一个变量,先假设数组第一个元素记录为最大值
	 *  2.对数组进行遍历,让假设的第一个元素与第二个元素进行比较。
	 *				如果假设的最大值小于下一个元素,则将下一个元素赋值为最大值,依次对数组后面的元素比较。
	 * 				如果假设的最大值大于下一个元素,则最大值仍为当前元素,就继续对数组后面的元素比较 
	 * 3 方法一:通过元素的方式;方法二:通过下标赋值的方式
	 * 明确:1.返回最大值 2.参数列表:传入数组
	 */
	// 方法一:通过元素的方式
	public static int getMax(int[] arr) {
		// 1.定义变量,初始化数组中第一个元素
		int max = arr[0];
		// 遍历数组,为了减少一次和子级的比较,所以i初始化值为1
		for (int i = 1; i < arr.length; i++) {
			// 若获取到当前元素大于max,重新赋值。
			if (arr[i] > max) {
				max = arr[i];
			}
		}
		// 数组遍历完之后,得到的max就是最大值
		return max;
	}

	// 方法二:通过元素下标的方式
	public static int getMax2(int[] arr) {
		// 1.定义变量,初始化数组下标值
		int maxIndex = 0;
		// 2.遍历数组
		for (int i = 1; i < arr.length; i++) {
			//3.通过下标进行判断
			if (arr[maxIndex] < arr[i]) {
				maxIndex = i;
			}
		}
		return arr[maxIndex];
	}