Java04 数组

数组的概述

  • 数组是相同类型数据的有序集合
  • 数组表述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
  • 其中每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问他们

数组的声明创建

  • 首先必须声明数组变量,才能在程序中使用数组
    定义
  • int[ ] nums; //声明一个数组
    nums=new [10]; //创建一个数组
  • int a[ ];(效果和上面相同,但不是首选方法)
  • 数组下标越界异常 java.lang.ArrayIndexOutOfBoundsException
  • 静态初始化
  • int[ ] a={1,2,3,4,5,6,7};
  • 动态初始化
  • int[ ] b=new int[10];
    b[0]=10;

数组的四个基本特点

  1. 长度是确定的,数组一旦创建,长度不可改变
  2. 元素必须是相同类型,不允许出现混合类型
  3. 数组中的元素可以是任何数据类型,包括基本类型和引用类型
  4. 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量,数组本身就是对象,Java中对象储存在堆中,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

数组的使用

  1. 高效for循环:快捷写法:(数组名).for
public static void main(String[] args){
	int[] arrays={1,2,3,4,5};
	//调用打印数组元素方法
	printArray(arrays);
	//调用反转数组方法
	int[] reverse=reverse(arrays);
}
//反转数组
public static int[] reverse(int[] arrays){
	int[] result=new int[arrays.length];
	//反转的操作
	for(int i=0,j=result.length-1;i<arrays.length;i++,j--){
		result[j]=arrays[i];
	}
	return result;
}
//打印数组元素
public static void printArray(int[] arrays){
	for(int i=0;i<arrays.length;i++){
		System.out.print(arrays[i]+" ");
	}
}

Arrays类

  • Arrays类中的方法都是static修饰的静态方法,在使用的时候可以通过类名直接进行调用,而不用使用对象调用(注意是不用而不是不能
  • Arrays.toString() 打印数组元素
int []a={1,2,3,4,5,6,7};
//自己写一个方法打印数组元素
public static void printArray(int[]a){
	for(int i=0;i<a.length;i++){
		if(i==0){
			System.out.print("[");
		}
		if(i==a.length-1){
			System.out.print(a[i]+"]");
		}else{
		System.out.print(a[i]+", ");
		}
	}

}
  • Arrays.sort() 对数组进行排序
  • Arrays.fill() 数组填充,将指定的字节分配给数组中的每个元素

冒泡排序

  1. 比较数组中,两个相邻的元素,如果第一个比第二个大,我们就交换他们的位置
  2. 每一次比较都会产生一个最大,或最小的数字
  3. 下一轮可以少一次排序
  4. 依次循环,直到结束!
//冒泡排序
public static void main(String[] args){
	int a={1,5,3,9,45,65,23,11,32};
	int[] sort=sort(a);//调用我们自己写的排序方法后,返回一个排序后的数组
	System.out.println(Arrays.toString(sort));
}


public static int[] sort(int[]array){
	//3.定义一个临时变量
	int temp=0//1.外层循环判断我们需要走多少次
	for(int i=0;i<a.length-1;i++){
		
		boolean flag=false;//通过flag标识位减少没有意义的比较
		
	//2.内层循环,比较两个数,如果第一个数比第二个数大,则交换位置
		for(int j=0;j<a.length-1-i;j++){
			if(array[j+1]>array[j]){
				temp=array[j];
				array[j]=array[j+1];
				array[j+1]=temp;
				flag=true}
		}
		if(flag==false){
			break;
		}
	}
	return array;
}

稀疏数组

  • 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
  • 稀疏数组的处理:
    1. 记录数组一共有几行几列,有多少个不同值
    2. 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
//稀疏数组案例
public static void main(String[] args){
	//1.创建一个二维数组11*11	0:没有棋子	1:黑棋	2:白棋
	int[][] array1=new int[11][11];
	array1[1][2]=1;
	array1[2][3]=2;
	//输出原始的数组
	System.out.println("输出原始的数组");
	for(int[] ints:array1){
		for(int anInt:ints){
			System.out.print(anInt+"\t");
		}
		System.out.println();
	}
	//转换为稀疏数组保存
	//1.获取有效值的个数
	int sum=0;
	for(int i=0;i<11;i++){
		for(int j=0;j<11;j++){
			if(array1[i][j]!=0){
				sum++;
			}
		}
	}
	System.out.println("有效值的个数:"+sum);
	//2.创建一个稀疏数组
	int[][] array2=new int[sum+1][3];
	array2[0][]=11;
	array2[0][1]=11;
	array2[0][2]=sum;
	//3.遍历二维数组,将非零的值存放到稀疏数组中
	int count=0;
	for(int i=0;i<array1.length;i++){
		for(int j=0;j<array1[i].length;j++){
			if(array1[i][j]!=0){
			count++;
			array2[count][0]=i;
			array2[count][1]=j;
			array2[count][2]=array1[i][j];
			}
		}
	}
	//4.输出稀疏数组
	System.out.println("输出稀疏数组");
	for(int i=0;i<array2.length;i++){
		System.out.println(array2[i][0]+"\t"
							+array2[i][1]+"\t"
							+array2[i][2]+"\t");
	}
	
	//还原稀疏数组=======================
	System.out.println("还原稀疏数组");
	//1.读取稀疏数组的值
	int[][] array3=new int[array2[0][0]][array2[0][1]];
	//2.给其中的元素还原值
	for(int i=1;i<array2.length;i++){
		array3[array2[i][0]][array2[i][1]]=array2[i][2];
	}
	//3.打印还原后的稀疏数组
	System.out.println("输出还原的数组");
	for(int[] ints:array3){
		for(int anInt:ints){
			System.out.print(anInt+"\t");
		}
		System.out.println();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值