zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java 数组、排序和查找(1)

2023-06-13 09:14:04 时间

目录

前言

一、一维数组

(1)数组介绍

(2)数组的使用

1)动态初始化

2)静态初始化

3)数组的引用

(3)数组的细节

(4)应用案例

二、数组赋值机制

 三、数组拷贝

总结


前言

国庆第五天,一维数组基本知识的复习。

一、一维数组

(1)数组介绍

        数组可以进行存放多个同一类型的数据。数组是一种引用数据类型,即数组就是一组数据。

(2)数组的使用

1)动态初始化

方法一:数据类型[ ] 数组名 = new 数据类型[大小]

       如:int[ ] a = new int[5];

方法二:先声明数组: 数据类型 数组名[ ]

       如:int[ ] a;

              再创建数组: 数组名 = new 数据类型[大小]

       如:a = new int[5];

2)静态初始化

方法:数据类型 数组名[ ] = {元素值1,元素值2……}

       如:int a[5] = {1, 2, 3, 4, 5};

3)数组的引用

引用方法:数组名 [下标];

注意:数组的下标是从0开始的,如:a数组第三个数的引用方法为 a[2]

(3)数组的细节

1)数组是多个相同类型数据的组合,实现对这些数据的统一管理

2)数组中的元素可以是任何数据类型,但不能混用

3)数组的下标是从 0 开始

4)数组的下标必须在指定范围内,否则报错

5)数组创建后,如果没有赋值则会有默认值

int 0、shrot 0、byte 0、long 0、float 0.0、double 0.0、String null、boolean false

(4)应用案例

1)创建一个 char 类型的 26 个元素的数组,分别 放置'A'-'Z',使用循环访问所有元素

public class ArrayExercise01 {
	public static void main(String[] args) {

		char[] c = new char[26];
		for(int i = 0; i < c.length; i++) {
			c[i] = (char) ('A' + i);// 'A' + i 是 int型,需要强制类型转换
			System.out.print(c[i] + " ");
		}

	}
}

输出结果:

 2)请求出一个数组 int[] 的最大值 {4,-1,9,10,23},并得到对应的下标

public class ArrayExercise02 {
	public static void main(String[] args) {

		int[] a = {4 , -1 , 9 , 10 , 23};
		int max = a[0];
		int j = 0;
		for(int i = 1 ; i < a.length ; i++) {
			if(a[i] > max) {
				max = a[i];
				j = i;
			}
		}
		System.out.println("最大值为:" + max);
		System.out.println("最大值的下标为:" + j);
	}
}

输出结果:

 思路分析:

1. 定义一个 int 数组 int[] a = {4,-1,9, 10,23};

2. 假定 max = a[0] 是最大值 , j=0;

3. 从下标 1 开始遍历 a, 如果 max < 当前元素,说明 max 不是真正的最大值, 我们就 max = 当前元素; j = 当前元素下标;

4. 当我们遍历这个数组 a 后 , max 就是真正的最大值,j 最大值对应的下标

二、数组赋值机制

1)基本数据类型赋值,这个值就是具体的数据,相互不影响。

如:int n1 = 10; int n2 = n1;

2)数组在默认情况下是引用传递,赋的值是地址。

3)基本数据类型赋值演示:

public class ArrayAssign {
	public static void main(String[] args) {

		//基本数据类型赋值,赋值方式为值拷贝
		//n2的变化,不会影响到n1的值
		int n1 = 10;
		int n2 = n1;

		n2 = 80;
		System.out.println("n1=" + n1);//10
		System.out.println("n2=" + n2);//80

	}
}

最后会输出:

 4)引用传递演示:

public class ArrayAssign {
	public static void main(String[] args) {

		//数组在默认情况下是引用传递,赋的值是地址,赋值方式称为 引用传递,传递的是一个地址
		int[] arr1 = {1,2,3};
		int[] arr2 = arr1; //把arr1赋给arr2
		//arr2 的值会影响 arr1 的值,所以称为引用传递
		arr2[0] = 10;
		for(int i = 0; i < arr1.length; i++) {
			System.out.println(arr1[i]);  // arr1 和 arr2 指向同一个数据空间
		}
	}
}

最后会输出:

 三、数组拷贝

案例演示:

将 int[] arr1 = {10,20,30}; 拷贝到 arr2 数组, 要求数据空间是独立的。

public class ArrayCopy {
	public static void main(String[] args) {

		 int[] arr1 = {10, 20, 30};

		 // 创建一个新的数组 arr2 , 开辟新的数据空间
		 // 大小 和arr1 一样大
		 int[] arr2 = new int[arr1.length];

		 //遍历 arr1 ,把每个元素拷贝到对应的位置
		 for(int i = 0; i < arr1.length; i++) {
		 	arr2[i] = arr1[i];
		 }
		 arr2[0] = 100; // 修改 arr2 不会对 arr1 造成影响

		System.out.print("arr1数组的值为:");
		for(int i = 0; i < arr1.length; i++) { 
		 	System.out.print(arr1[i] + " ");
		}

		System.out.println( );

		System.out.print("arr2数组的值为:");
		 for(int i = 0; i < arr1.length; i++) { 
		 	System.out.print(arr2[i] + " ");
		}
	}
}

最后输出结果为:

        可以看出 arr2 的改变没有影响到 arr1,这就是数组的拷贝,会开创独立的数据空间,不会互相影响。

总结

        努力,成功!