Live2D
复制代码

01-数组概述

数组概要Array

1、什么是数组

package a数组概要;

/*
 *Array
 *		1、Java语言中数组是一种引用数据类型,非基本数据类型。数组的父类是Object类
 *		2、数组就像一个容器,可以同时容纳多个元素,即数组是一组数据的集合,字面意思:一组数据
 *		3、数组之中可以存储基本数据类型的数据,也可以存储引用数据类型的数据
 *		4、数组是引用数据类型,所以数组对象存储在堆内存中
 *		5、数组当中存的是Java对象的话,实际上存的是对象的(引用)内存地址
 *		6、Java中规定,数组一旦被创建,其长度不可被更改(数组长度不可变)
 *		7、数组分一维数组、二维数组、三维数组....多维数组(一维数组使用较多,二维次之)
 *		8、所有的数组对象都有length属性(Java自带),用来获取数组中元素的个数
 *			注意:length是属性,不是方法,调用后面不带()
 *		9、Java中数组中的数组元素类型要统一,如定义的是int类型数组只能存储int类型的数组元素,Person类型数组只能存储Person类型
 *		   例:某超市购物袋只能装苹果,不能苹果和橘子一起装
 *		10、数组的内存存储方面,数组的元素内存地址(存储的每个元素都是有规则挨着排列的)是连续的,这是数组存储元素的特点
 *		    数组是一种简单的数据结构
 *		11、所以数组都已第一个小方框(第一个数组对象)的内存地址作为整个数组对象的内存地址,
 *		12、数组的每一个元素都有一个下标,其从0开始,以1递增;最后一个下标是length-1
 *			下标非常重要,对数组中元素进行“存取”,都需要通过下标进行
 *		13、数组的优缺点
 *			
 *			优点:查询/查找/检索某个下表上的元素时效率极高,可以说查找效率最高的一个数据结构
 *					为什么?
 *						1.数组元素中的内存地址在空间存储上是连续的
 *						2.数组元素类型相同,所占用的空间大小一样
 *						3.知道第一个元素的内存地址及其元素占用空间大小,又知道下标,即可通过数学表达式计算出某个下标
 *						  的元素的内存地址,然后通过内存地址定位元素。
 *					数组中存100个元素和100万个元素的检索效率是一样的,因为数组中的元素查找不是一个一个找的,而是
 *					通过数学表达式计算出内存地址直接定位的
 *			缺点:1.为了保证数组中元素内存地址的连续性,在数组上随机增删元素时效率降低,原因是随机增删元素会涉及到
 *				  后面元素统一向前或向后位移的操作
 *				  2.数组不能存储大数据量,原因:
 *					在堆内存空间中被建立了许多不规则保存如对象等的内存空间,导致堆内存中很难定义一块特别大且连续的内存
 *				注意:对于数组的最后一个元素的增删是没有效率影响的
 *		14、声明/定义一个数组
 *		语法格式:
 *				int[] array1;
 *				String[] array2;
 *				double[] array3;
 *				boolean[] array4;
 *				Object[] array5;
 *		15、初始化一维数组
 *			两种方式:
 *					静态初始化一维数组与动态初始化一维数组
 *			静态初始化语法:
 *				int[] array1 = {100,255,666};
 *
 *			动态初始化语法:
 *				int[] array1 = new int[5];//初始化一个长度为5(5个数组元素)的数组,每个元素默认0
 *				String[] array2 = new String[6];//初始化一个长度为6(6个数组元素)的数组,每个元素默认null
 */

public class ArrayTest1 {
	
	public static void main(String[] args) {
		
		//数组的静态初始化
		int[] a = {10,25,62,3,55,455};
		//int b[] = {12,65,45};---->C++式写法
		
		//数组都有length属性
		System.out.println("数组中的元素个数="+a.length);
		
		//数组的每个元素都有下标
		//通过下标对数组元素进行存取
		//取(读)
		System.out.println("The first value of Array a is "+a[0]);//读取数组第一个元素
		System.out.println("The last value of Array a is "+a[5]);//读取数组最后一个元素
		System.out.println("The last value of Array a is "+a[a.length-1]);//读取数组最后一个元素
		
		//改
		//第一个改为123
		a[0]=123;
		System.out.println("The first value of Array a is "+a[0]);
		
		//最后一个改为666
		a[5]=666;
		System.out.println("The last value of Array a is "+a[5]);
		
		//数组的遍历
		for(int i =0;i<=a.length-1;i++) {
			System.out.println(a[i]);
		}
		
		//当输出不存在的a[6]时会报什么异常?
		//System.out.println(a[6]);//ArrayIndexOutOfBoundException(下标越界异常--著名异常)
		
		//数组从最后一个元素遍历到第一个元素
		for (int j = a.length-1; j >= 0; j--) {
			System.out.println("反遍历输出为"+a[j]);
			
		}

	}

}

2、数组的初始化

package a数组概要;

/*
 * 数组初始化方式的选择:
 * 					1、当已经确定数组中所要存储元素的值时,采用静态初始化
 * 					2、不确定将来数组要存储哪些具体数据时,采用动态初始化,预先分配内存空间
 */

public class ArrayTest2 {
	
	public static void main(String[] args) {
		
		//动态初始化一维数组
		int[] a = new int[5];//创建一个int类型长度为5的一维数组,每个元素默认值为0
		
		//遍历数组a
		for (int i = 0; i < a.length; i++) {
			
			System.out.println("下标为"+i+"的元素值是 "+a[i]);
			
		}
		//后期赋值
		a[0]=2;
		a[1]=5;
		a[2]=9;
		a[3]=8;
		a[4]=6;
		for (int i = 0; i < a.length; i++) {
			
			System.out.println("下标为"+i+"的元素值是 "+a[i]);
			
		}
		System.out.println("=========================================");
		
		//动态初始化一个Object类型的一维数组
		Object[] o = new Object[3];
		
		for (int i = 0; i < o.length; i++) {
			Object object = o[i];
			System.out.println("下标为"+i+"的元素值为"+object);
			
		}
		//静态初始化Object类型数组
		//创建对象
		Object o1 = new Object();
		Object o2 = new Object();
		Object o3 = new Object();
		//创建数组
		Object[] objects = {o1,o2,o3};
		for (int i = 0; i < objects.length; i++) {
			System.out.println(objects[i]);//调用Object中的toString()方法,因为未改写的toString是引用的字符串表示	
		}
		
		System.out.println("=========================================");
		
		
	}

}

3、方法中的参数数组

package a数组概要;

/*
 * 方法中的数组参数
 */

public class ArrayTest3 {
	
	public static void main(String args[]) {
		
		//创建int类型数组传参
		int[] a = {1,2,3};
		m1(a);
		System.out.println("==============================>");
		
		//直接传递静态数组时语法如下
		//Error-->m1({45,46,89});
		m1(new int[] {78,56,84});
		System.out.println("==============================>");
		
		//创建动态初始化String类型数组
		String[] strings = new String[4];
		m2(strings);
		System.out.println("==============================>");
		
		//或者直接传动态数组
		m2(new String[3]);
		
	}
	//传参数为int类型数组
	public static void m1(int[] array1) {
		
		for (int i = 0; i < array1.length; i++) {
			
		System.out.println(array1[i]);

		}
		
	}
	
	//传参为String类型数组
	public static void m2(String[] array1) {
		
		for (int i = 0; i < array1.length; i++) {
			
		System.out.println(array1[i]);
			
		}
		
	}

}

posted @ 2021-07-24 18:53  Milen-jie  阅读(78)  评论(0编辑  收藏  举报