Java 数组

数组

1. 为什么要使用数组
在开发中,可能会遇到需要处理相同数据类型数据,数据量极大的情况。如果按照CV大法进行变量定义操作,会导致以下问题:
	1. 代码冗余!!!超出方法建议行数80行
	2. 变量名命名压力极大!!!
	3. 对于当前数据进行操作处理,没有统一形式,并且操作繁琐。
2. 生活中对于数组的使用情况
超市:
	归纳总结!!!
	同一个货架上存放的是相同的商品。

图书馆:
	T ==> 社科类书籍
	
	<<高频电子线路>> T
	图书馆中有10本
	同一个书架上
	当前书籍会有一个唯一编号
		T-100
	十本书每一本都有自己的索引
		T-100-01 ~ T-100-10

总结:
	1. 相同图书存储位置连续
	2. 占用空间是同一个空间 
	3. 具有一个对外的统一名称  T-100
	4. 具有每一个数据的独立编号 T-100-01 ~ T-100-10
3. Java中定义数组的格式 【重点】
格式:
	数据类型[] 数组名 = new 数据类型[容量];

解释:
赋值号左侧
	数据类型:
		明确告知编译器,当前数组能够存储的数据类型是哪一个,并且限制有且只能是当前数据类型。【数据类型一致化】
	[]:
		1. 告知编译器,这里定义的是一个数组类型
		2. 数组名是一个【引用数据类型】变量,引用数据类型具有明确的指向性!
	数组名:
		1. 操作数组非常重要的名字,当前数组数据对外的整体名字
		2. 数组名是一个【引用数据类型】变量
	左侧:
		告知当前定义的数组名是什么,存储的数据类型有且只能是哪一个类型
	
赋值号右侧
	new:
		1. 在内存的【堆区】按照要求申请对应的内存数据空间。
		2. new关键字会清空整个申请空间的所有数据。
	数据类型:
		前后呼应,明确告知当前存储的数据类型是哪一个。【数据类型一致化要求】
	[容量]:
		capacity 当前数组能够存储的最大数据容量。一旦确定无法修改。
		容量范围在int范以内。
4. 数组定义和使用【重点】
使用数组,必须要使用数组中的下标操作。
	下标:
		0 ~ 数组容量 - 1、
	例如:
		int[] arr = new int[10];
		有效下标 0 ~ 9
		如果使用下标为负数或者大于9都是【非法下标】
		
数组使用中,负数一定是非法下标!!!通常会使用-1来作为一定的错误标记和异常情况提示。
/*
基本的数组演示
*/
class Demo2 {
	public static void main(String[] args) {
		/*
		数据类型[] 数组名 = new 数据类型[容量];
		*/
		int[] arr = new int[10];
		/*
		1. 定义的数组存储数据为int类型
		2. 数组名 arr,同时也是引用数据类型变量
		3. 数组的容量为10,不可变!!!容量和【有效元素个数】不冲突。
		*/
		
		// 赋值数组中指定下标的元素
		// 这里分别对于数组中下标为0,以及下标为5的位置进行赋值操作
		arr[0] = 10;
		arr[5] = 20;
		
		/*
		数组名[要求为int类型数据] -1是符合语法要求,为int类型,编译
		不会有任何的错误提示。
		
		当前程序运行时,发现 -1 不合法,提示报错【运行时错误】
		*/
		// arr[-1] = 20;
		/*
		Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
			at Demo2.main(Demo2.java:27)
		ArrayIndexOutOfBoundsException 数组下标越界异常,当前数组下标为-1,超出有效范围
		*/
		
		arr[10] = 10;
		/*
		Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
			at Demo2.main(Demo2.java:34)
		ArrayIndexOutOfBoundsException 数组下标越界异常
		【规矩】
			ArrayIndexOutOfBoundsException 如果想要我帮你解决问题,一次50红包发QQ群
			一定要学会推演代码的运行过程。
			NullPointerException 同上!!!
		*/
		// 可以进行取值操作
		System.out.println(arr[0]);
		System.out.println(arr[5]);
	}
}
5. 数组内存分析图【重点,难点】

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPSz7bym-1614346468515)(img/01-数组内存分析图.png)]

6. 数组和for循环
数组:
	int[] arr = new int[10];
	获取当前数组的容量属性:
		arr.length => 10  
		. 的
	
for循环
	for (int i = 0; i < arr.length; i++) {
		// 循环体
	}
class Demo3 {
	public static void main(String[] args) {
		// 定义一个int类型数组,数组名 arr,容量为10
		int[] arr = new int[10];
		
		/*
		使用for循环对数组进行赋值操作
		i 从 0 开始,到 arr.length - 1 结束。循环范围刚刚好
		是整个数组的有效下标范围。
		*/
		for (int i = 0; i < arr.length; i++) {
			// i 我们可以看做是一个下标
			arr[i] = i * 2;
		}
		
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
 	}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BobI2epT-1614346468518)(img/02-循环赋值数组中的元素内容.png)]

7. 数组常用功能事项
7.1 找出数组中指定元素的下标位置
假设:
	数组 int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
	查询目标元素 15 下标 7
	查询目标元素 3下标 1
	查询目标元素 25 下标 -1
/*
7.1 找出数组中指定元素的下标位置
假设:
	数组 int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
	查询目标元素 15 下标 7
	查询目标元素 3 下标 1
	查询目标元素 25 下标 -1
*/
class Demo4 {
	public static void main(String[] args) {
		// 目标数组
		int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
		// 目标查询的数据
		int find = 125;
		
		/*
		利用循环找出数组中指定元素的下标位置
		查询数据的预期:
			当前数据不存在。
			这里需要一个变量来保存目标数据的下标位置,可以预设为 -1
		*/
		int index = -1;
		
		// 遍历整个数组
		for (int i = 0; i < arr.length; i++) {
			// 判断目标数据是否对应数组中下标为 i 的元素内容
			if (find == arr[i]) {
				index = i;
				/*
				循环没有继续执行的必要性,可以结束当前循环执行
				break可以用于跳出循环结构,有且只能跳出一层结构
				*/
				break;
			}
		}
		
		// 判断 index 数据变化
		if (index > -1) {
			System.out.println("找到目标数据下标位置 : " + index);
		}  else {
			System.out.println("没有对应数据");
		}
		
	}
}
/*
【方法封装实现】
7.1 找出数组中指定元素的下标位置
假设:
	数组 int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
	查询目标元素 15 下标 7
	查询目标元素 3 下标 1
	查询目标元素 25 下标 -1
*/
class Demo4 {
	public static void main(String[] args) {
		// 目标数组
		int[] arr = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};
		// 目标查询的数据
		int find = 11;
		
		/*
		调用了一个带有数组作为参数的方法
		这里需要传入的实际参数就是数组名
		*/
		int index = indexOf(arr, find);
		
		// 判断 index 数据变化
		if (index > -1) {
			System.out.println("找到目标数据下标位置 : " + index);
		}  else {
			System.out.println("没有对应数据");
		}
		
	}
	
	/*
	方法分析:
		public static:
			固定格式,不要问
		返回值类型:
			int 类型返回当前查询目标数据的下标位置,返回值大于等于0表示找到目标数据,
			返回值-1,没有找到
		方法名:
			indexOf 
		形式参数列表:
			1. 需要查询数据的目标数组 int[] arr
			2. 找谁,目标数据 int find
	方法声明:
		public static int indexOf(int[] arr, int find)
	*/
	/**
	* 在指定数组中,找出指定元素所在的下标位置
	* 
	* @param arr  查询数据的目标数组,为 int 类型
	* @param find 需要查询的目标数据
	* @return 返回值大于等于0,表示找到目标数据,否则没有找到
	*/
	public static int indexOf(int[] arr, int find) {
		/*
		利用循环找出数组中指定元素的下标位置
		查询数据的预期:
			当前数据不存在。
			这里需要一个变量来保存目标数据的下标位置,可以预设为 -1
		*/
		int index = -1;
		
		// 遍历整个数组
		for (int i = 0; i < arr.length; i++) {
			// 判断目标数据是否对应数组中下标为 i 的元素内容
			if (find == arr[i]) {
				index = i;
				/*
				循环没有继续执行的必要性,可以结束当前循环执行
				break可以用于跳出循环结构,有且只能跳出一层结构
				*/
				break;
			}
		}
		
		return index;
	}
}
7.2 找出数组中最大值下标位置
假设:
	数组 int[] arr = {1, 3, 5, 7, 19, 2, 4, 6, 8, 10};
	最大值下标 4
/*
假设:
	数组 int[] arr = {1, 3, 5, 7, 19, 2, 4, 6, 8, 10};
	最大值下标 4
*/
class Demo5 {
	public static void main(String[] args) {
		int[] arr = {1, 3, 5, 7, 19, 2, 4, 6, 8, 110};
		
		// 先找出一个参照物,假设数组中下标为0的元素为最大值。
		int maxIndex = 0;
		
		// 利用循环遍历整个数组,进行两两比较
		for (int i = 1; i < arr.length; i++) {
			// 利用if浦判断,如果发现maxIndex保存的元素小于当前i下标对应元素
			if (arr[maxIndex] < arr[i]) {
				maxIndex = i;
			}
		}
		
		System.out.println(maxIndex);
	}
}
7.3 找出数组中最小值下标位
假设:
	数组 int[] arr = {1, 3, 5, 7, 19, 2, 4, 6, 8, 10};
	最小值下标 0 
7.4 替换数组中所有元素为1的内容,改为100
假设:
	数组 int[] arr = {1, 2, 3, 4, 5, 1, 2, 3, 4, 6};
	结果
		{1, 2, 3, 4, 5, 1, 2, 3, 4, 6} ==> {100, 2, 3, 4, 5, 100, 2, 3, 4, 6} 
/*
假设:
	数组 int[] arr = {1, 2, 3, 4, 5, 1, 2, 3, 4, 6};
	结果
		{1, 2, 3, 4, 5, 1, 2, 3, 4, 6} ==> {100, 2, 3, 4, 5, 100, 2, 3, 4, 6} 
		
		增
		删
		改
		查
		排序
		过滤
*/
class Demo6 {
	public static void main(String[] args) {
		int[] arr = {1, 2, 3, 4, 5, 1, 2, 3, 4, 6};
		// target 目标
		int target = 3;
		
		replace(arr, target);
		
		showIntArray(arr);
	}
	
	public static void replace(int[] arr, int target) {
		// 遍历数组,找出数组中元素为 1 的内容。替换操作。
		for (int i = 0; i < arr.length; i++) {
			if (target == arr[i]) {
				arr[i] = 100;
			}
		}
	}
	
	public static void showIntArray(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}
}
7.5 展示数组中的所有奇数
假设:
	数组 int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	结果
		展示 1 3 5 7 9

arget) {
		// 遍历数组,找出数组中元素为 1 的内容。替换操作。
		for (int i = 0; i < arr.length; i++) {
			if (target == arr[i]) {
				arr[i] = 100;
			}
		}
	}
	
	public static void showIntArray(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值