Java基础之数组

本文详细介绍了Java中数组的概念、一维数组的声明、创建与遍历,包括数组的初始化、索引访问,以及冒泡排序和选择排序算法。此外,还探讨了多维数组的应用,并提到了使用`java.util.Arrays`工具类进行数组操作的方法,如数组填充、排序、比较和查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组的概念:Java 语言中提供的数组是用来存储固定大小的同类型元素,即一组类型相同的元素。

数组分为一维数组和多维数组

一维数组

声明数组

数组和变量一样,需要声明之后才能使用,声明之后JVM不会给数组分配内存空间,只有实例化之后才会为数组分配内存空间。

数组的声明有两种方式:

dataType[] arrayRefVar;   // 首选的方法
dataType arrayRefVar[];  // 效果相同,但不是首选方法
这两种方式只是在写法上略有不同,并没有实质性的差别。

创建数组

创建数组分为两步:

  1. 声明数组
  2. 实例化数组
dataType[] arrayRefVar = new dataType[arraySize];

即声明指定类型的数组并为数组分配指定空间,再给每一个元素赋值。

在赋值之前,数组当中其实是有元素的,根据类型的不同其中的元素也不同,引用数据类型的值为null,基本数据类型根据类型的不同又有不同,byte、int、short、long类型为0,float、double类型为0.0,char类型为空格( ),boolean类型为false。

dataType[] arrayRefVar = {value0, value1, ..., valuek};

声明的时候直接赋值,这样不用指定数组的长度,赋多少值数组的长度就是多少。

数组的元素是通过索引来访问的,并且数组的索引是从0开始的,从0到arraySize.length-1。

数组的遍历

数组的遍历就是得到数组中的每一个元素,我们知道数组的每一个元素都是有一个索引的,我们遍历数组也是根据这个索引得到相应索引位置上的元素,一般遍历数组都是通过循环实现的。

public static void main(String[] args) {
		// 定义一个数组
		int[] arr = new int[5];
		// 给每一个元素赋值
		arr[0] = 1;// 动态初始化
		arr[1] = 2;
		arr[2] = 3;
		arr[3] = 4;
		arr[4] = 5;
		// 遍历数组
		for (int i = 0; i < arr.length; i++) {
			// 输出每一个元素
			System.out.println(arr[i]);
		}
	}

我们也可以通过增强for循环来实现数组的遍历。

		for (int i : arr) {
			System.out.println(arr[i]);
		}

数组排序

这里介绍的是比较常见的冒泡排序和选择排序

冒泡排序

冒泡排序是比较经典的算法,它的思路是:比较数组中相邻的两个元素,将大的元素交换到右端。

public static void main(String[] args) {
		int[] arr={6,3,8,2,9,1};// 定义一个数组并静态初始化
		System.out.println("排序前数组为:");
		for(int num:arr){
			System.out.print(num+" ");
			}
		for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数
			for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
				if(arr[j]>arr[j+1]){
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		} 
		System.out.println();
		System.out.println("排序后的数组为:");
		for(int num:arr){
			System.out.print(num + " ");
		} 
	}
选择排序

选择排序的基本思路:在数组的元素中选出最小的元素,将这个元素放到索引为0的位置,从第二位在进行比较,将最小的放到索引为1的位置,以此类推。

	public static void main(String[] args) {
		int[] arr = { 1, 3, 2, 45, 65, 33, 12 };
		System.out.println("交换之前:");
		for (int num : arr) {
			System.out.print(num + " ");
		}
		// 选择排序的优化
		for (int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
			int k = i;
			for (int j = k + 1; j < arr.length; j++) {// 选最小的记录
				if (arr[j] < arr[k]) {
					k = j; // 记下目前找到的最小值所在的位置
				}
			}
			// 在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
			if (i != k) { // 交换a[i]和a[k]
				int temp = arr[i];
				arr[i] = arr[k];
				arr[k] = temp;
			}
		}
		System.out.println();
		System.out.println("交换后:");
		for (int num : arr) {
			System.out.print(num + " ");
		}
	}

多维数组

多维数组(这里以二维数组为例)和一维数组没有太大的区别,就是数组中的每一个元素都是一个一维数组。

type arrayName = new type[arraylenght1][arraylenght2];
// 实例
int a[][] = new int[2][3];

二维数组可以用于矩阵的运算

/**
 * 矩阵相加
 * 
 * @author Administrator
 *
 */
public class Demo2 {
	public static void main(String[] args) {
		int[][] a = { { 1, 3, 5 }, { 2, 4, 8 } };
		int[][] b = { { 3, 4, 5 }, { 5, 6, 9 } };

		int[][] c = add(a, b);
		print(c);
	}

	/**
	 * 矩阵相加方法
	 * 
	 * @param a
	 * @param b
	 * @return
	 */
	public static int[][] add(int[][] a, int[][] b) {
		// 用来接收结果
		int[][] c = new int[a.length][a.length];
		// 遍历数组,进行加运算
		for (int i = 0; i < c.length; i++) {
			for (int j = 0; j < c[i].length; j++) {
				// System.out.println(c[i].length);
				c[i][j] = a[i][j] + b[i][j];
			}
		}

		return c;
	}

	/**
	 * 打印数组方法
	 * 
	 * @param arr
	 */
	public static void print(int[][] arr) {
		// 遍历数组
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j] + "\t");
			}
			System.out.println();
		}
	}
}

数组的工具类

java中提供了对数组操作的工具类Arrays,它在java.utils.Arrays包下,它提供的方法都是静态的。

具有以下功能:

  • 给数组赋值:通过 fill 方法。
  • 对数组排序:通过 sort 方法,按升序。
  • 比较数组:通过 equals 方法比较数组中元素值是否相等。
  • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值