07十分全面的数组概念

07

数组

在这里插入图片描述

1.基本概念

概念:

用来存储一组相同数据类型的集合(容器)

引用数据类型:类 接口 数组

特点:

  • 数组中的元素类型必须一致
  • 数组本身是引用数据类型,但是里面的元素既可以是基本数据类型,也可以是引用数据类型
  • 数组的长度一旦给定便无法改变

声明:

//数据类型[] 数组名;
int[] arr;
//数据类型 数组名[];
String arr[];

main方法中 args 和 [] 位置可以更改

2.数组的动态初始化
  • 给定数组的长度,有系统的分配空间和初始值。

格式:

//数据类型[] 数组名 = new 数据类型[长度];
int[] arr2 = new int[4];

数据的存取:

  • 索引值:数组中元素的序号(从0开始,最大值是数组的长度减1)
  • 赋值:
数组名[索引值] = 要赋的值
  • 取值:
数组名[索引值];
public class Demo1 {
	public static void main(String[] args) {
		String arr[] = new String[4];
		arr[0] = "春季";
		arr[1] = "夏季";
		arr[2] = "秋季";
		arr[3] = "冬季";
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr[3]);

		char arr1[] = new char[4];
		arr1[0] = '多';
		arr1[1] = '易';
		arr1[2] = '教';
		arr1[3] = '育';
		System.out.println(arr1[0]);
		System.out.println(arr1[1]);
		System.out.println(arr1[2]);
		System.out.println(arr1[3]);

		int arr2[] = new int[10];
		for (int i = 0; i < 10; i++) {
			arr2[i] = i + 1;
			System.out.println(arr2[i]);
		}

	}

}
3.数组的内存分析
  • 栈:存储局部变量,方法的执行,没有初始值
  • 堆:new出来的东西,有初始值
    • 基本类型:默认值
    • 引用类型:null

如果堆中没有栈中的变量指向时,就会成为垃圾,等待GC自动回收

public class Demo2 {
	public static void main(String[] args) {
		int[] arr = new int[3];
		
		System.out.println(arr);//打印数组在栈中的地址值
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		
		arr[1] = 100;
		System.out.println(arr[1]);
	}
}
public class Demo3 {
	public static void main(String[] args) {
		String[] arr1 = new String[5];
		arr1[1] = "大";
		System.out.println(arr1[1]);
	
		String[] arr2 = new String[4];
		arr2[1] = "小";
		arr2 = arr1;//将arr1的地址值赋值给arr2
		System.out.println(arr1[1]);//大
		System.out.println(arr2[1]);//大
	}
}
4.数组的静态初始化
  • 给定数组中的元素,由系统根据数组元素的个数开辟空间并赋值

格式:

//数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…}
char[] ch = new char[] { '春', '夏', '秋', '冬' };

//数据类型[] 数组名 = {元素1,元素2,元素3…}
boolean[] bool = { false, false, true, true };

第二种类型只有初始化时可以定义,重新赋值不可以这样写

获取数组的长度:

数组名.length
public class Dem4 {
	public static void main(String[] args) {
		char[] ch = new char[] {'春', '夏', '秋','冬' };
		for (int i = 0; i < ch.length; i++) {
			System.out.println(ch[i]);
		}

		boolean[] bool = { false, false, true, true };
		for (int i = 0; i < bool.length; i++) {
			System.out.println(bool[i]);
		}
		
		int[] num = { 4, 8, 8, 9, 5 };
		int sum = 0;
		double pingjun = 0;
		for (int i = 0; i < num.length; i++) {
			sum += num[i];
			pingjun = (double)sum / num.length ;
		}
		System.out.println("五个数之和为:" + sum);
		System.out.println("五个数的平均值为:" + pingjun);
	}

}
5.数组中常见两种异常
  • 空指针异常:java.lang.NullPointerException
  • 数组角标越界异常:java.lang.ArrayIndexOutOfBoundsException
public class Demo5 {
	public static void main(String[] args) {
		int[] arr = null;
		System.out.println(arr);//null
		System.out.println(arr.length);//空指针异常
        
        arr = new int[3];
		System.out.println(arr[3]);//数组角标越界异常
	}
}
6.数组案例
  • 点名系统
import java.util.Random;

public class Demo6 {

	public static void main(String[] args) {
		//1.构建数组名字
		String names[] = new String[] {"小红","小绿","小黑","小白","小粉","小黄","小蓝","小花"};
		
		//2.生成随机数
		Random random = new Random();
		int index = random.nextInt(names.length);
		
		//3.从数组中索引对应的元素
		String name = names[index];
		
		System.out.println(name);
			
	}

}
  • 数组工具类封装
import java.util.Scanner;

public class ArrayUtil {

	// 此方法可以用于遍历int类型
	// 需要传入一个int类型
	public static void printArr(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			if (i == 0) {
				System.out.print("[" + arr[i] + ",");
			} else if (i == arr.length - 1) {
				System.out.print(arr[i] + "]");
			} else {
				System.out.print(arr[i] + ",");
			}
		}
	}

	// 此方法可以用于遍历String类型
	// 需要传入一个String类型
	public static void printArr(String[] arr) {
		for (int i = 0; i < arr.length; i++) {
			if (i == 0) {
				System.out.print("[" + arr[i] + ",");
			} else if (i == arr.length - 1) {
				System.out.print(arr[i] + "]");
			} else {
				System.out.print(arr[i] + ",");
			}
		}
	}

	// 数组中求最值的方法
	// 需要传入一个int类型的数组
	public static void getMaxAndMin(int[] arr) {
		int max = arr[0];
		int min = arr[0];
		for (int i = 1; i < arr.length; i++) {
			if (arr[i] > max) {
				max = arr[i];
			}
			if (arr[i] < min) {
				min = arr[i];
			}
		}
		System.out.println("数组中的最大值为:" + max);
		System.out.println("数组中的最小值为:" + min);
	}
	
	//对数组中的任意元素进行位置交换
	public static void changeElement(int[] arr) {
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("请输入要交换元素的索引:");
		System.out.println("请输入第一个元素的索引:");
		int index1 = scanner.nextInt();
		
		System.out.println("请输入第二个元素的索引:");
		int index2 = scanner.nextInt();
		
		if (!(index1 >= 0 && index1 <= arr.length - 1 && index2 >= 0 && index2 <= arr.length - 1)) {
			System.out.println("输入的索引超出边界范围,请重新输入!");
			return;
		} 
		
		System.out.println("元素交换前:");
		printArr(arr);
		
		int temp = arr[index1];
		arr[index1] = arr[index2];
		arr[index2] = temp;
		
		System.out.println();
		System.out.println("元素交换后:");
		printArr(arr);
	}
	
	//数组中元素进行倒序操作
	//需要传入一个int类型的数组	
	public static void reverse(int[] arr) {
		System.out.println("逆序前:");
		printArr(arr);
		for (int start = 0,end = arr.length-1;start < end; start++,end--) {
			int temp = 0;
			temp = arr[start];
			arr[start] = arr[end];
			arr[end] = temp;
		}
		System.out.println();
		System.out.println("逆序后:");
		printArr(arr);
	}
	
}
7.多维数组
  • n维数组就是元素为n-1维数组的数组
  • 给二维数组中的一组值赋值时不能简写

格式:

/*数据类型[][] 数组名 = new 数据类型[m][n];
 *m:二维数组中一维数组的个数
 *n:一维数组中的元素个数*/
int[][] arr = new int[5][4] ; 

/*数据类型[][] 数组名 = new 数据类型[m][];
 *m: 二维数组中一维数组的个数*/
int[][] arr1 = new int[3][];

/*数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}...};
简写: 数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}...};*/
int[][] arr2 = {{1,2,3,4,5,6},{7,8,9},{10,20,30}};
public class Demo7 {

	public static void main(String[] args) {
		int[][] arr = new int[5][4] ; 
		
		arr[1][1] = 5;
		arr[4][3] = 10;
		
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}
		
		int[][] arr1 = new int[3][];
		arr1[0] = new int[] {1,2,3,4,5};
		arr1[1] = new int[] {100,200,300};
		arr1[2] = new int[] {66,88};
		
		for (int i = 0; i < arr1.length; i++) {
			for (int j = 0; j < arr1[i].length; j++) {
				System.out.print(arr1[i][j]+" ");
			}
			System.out.println();
			
			int[][] arr2 = {{1,2,3,4,5,6},{7,8,9},{10,20,30}};
			arr[0][2] = 10;
			
			for (int k = 0; k < arr2.length; k++) {
				for (int l = 0; l < arr2[k].length; l++) {
					System.out.print(arr2[k][l]);
				}
				System.out.println();
			}
		}
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值