数组的概念与应用

数组的概念与应用
一、数组的概念

​ 1、概念:数组是一组**连续的存储空间,存储多个相同类型**的值。

二、数组的创建

​ 2.1基本语法: 数据类型 [ ] 数组名 = new 数据类型 [长度]; 如: int [ ] a =new int [5];

​ 2.2数组的创建语法:

​ a.先声明、再分配空间

​ 数据类型[ ] 数组名;
​ 数组名 = new 数据类型[长度];
​ b.声明并分配空间
​ 数据类型[ ] 数组名 = new 数据类型[长度];
​ c.声明并赋值(繁)
​ 数据类型[ ] 数组名 = new 数据类型[ ]{value1,value2,value3,.……};
​ d.声明并赋值(简)
​ 数据类型[] 数组名 = {value1,value2,value3,.……}; //显示初始化,注意:不可换行

三、数组的组成

​ a. 数组中的“每个格子” 被称为 ”数组的元素“。

​ b.对元素的访问分别为:”赋值“ 与 ”取值

​ c.访问元素:通过”下标“访问。(:下标从0开始,依次+1,自动增加)

​ d.访问数组的语法:数组名[下标] 如: a[0]=10(值) a[0] (值)

​ e.数组范围:数组下标从0开始,数组总长度减1,如:int [ ] a =new int [5]; 数组长度为:0------->5-1(4),即0—4;如果不在 下标范围内,会产生数组下标越界异常。

public class TestArray {
	public static void main(String[] args) {
		// 1.使用声明并分配空间的方式创建数组
		int[] nums = new int[5];
		// 2访问元素(存值)
		nums[0] = 10;
		nums[1] = 20;
		nums[2] = 30;
		nums[3] = 40;
		nums[4] = 50;
		// 3.访问元素(取值) 数组名[下标
		int a = nums[0];
		System.out.println(a);
		System.out.println(nums[1]);
		System.out.println(nums[2]);
		System.out.println(nums[3]);
		System.out.println(nums[4]);
		System.out.println(nums[5]);// 数组下标越界,出错
	}
}	
四、数组的遍历

​ 1、概念:从头至尾,逐一对数组中的元素进行访问。 动态获取数组的长:数组名.length

​ 注意:JDK1.5之后,Java提供了增强for循环简化数组或集合的遍历。

​ 2、语法:

​ for(数组元素类型 n : 数组){ n代表数组中每个元素
​ }
缺点:不能使用下标

public class TestArray {
	public static void main(String[] args) {
		// 1.使用声明并分配空间的方式创建数组
		int[] nums = new int[5];
		// 2访问元素(存值)
		nums[0] = 10;
		nums[1] = 20;
		nums[2] = 30;
		nums[3] = 40;
		nums[4] = 50;
		// 使用增强for循环遍历数组
		for (int n : nums) {
			System.out.print(n + "\t");
		}
		System.out.println();// 每打印一个元素换行
	}
}
五、数组内存

程序运行中有两块重要的存储空间

​ 1、栈

​ a.存储基本类型数据以及引用类型的地址

​ b.空间比较小 ,存储速度较快,JDK1.5之前256k, JDK1.5之后1M

​ c.出栈顺序:先进先出。

​ 2、堆

​ a.存储引用类型的实际数据。

​ b.空间比较大

​ 注意:数组属于引用类型,实际存储再堆中,栈中存储堆中数据的引用(地址)。

六、数组的扩容

​ 1、创建数组时,必须显示指定长度,并在创建之后不可更改长度。
​ 2、 扩容思想
​ 创建一个大于原数组长度的新数组。将原数组中的元素依次赋值给新数组。
​ int [ ] newNums=new int[nums.length*2];

​ 3、数组的复制

​ a. System.arraycopy(原数组,原数组的起始位置,新数组,新数组的起始位置,长度);

​ b. 数组类型=java.util.Arrays.copyOf(原数组,新数组的长度); 根据长度创建新数组,并将原数组中的元素赋值给新数组。

public class TestArray1{
	public static void main(String [] args){
		//1创建一个源数组
		int [] nums=new int[5];
		//2访问元素 存值
		nums[0]=11;
		nums[1]=22;
		nums[2]=33;
		nums[3]=44;
		nums[4]=55;
		//3遍历元素
		System.out.println("遍历源数组:");
		for(int i=0;i<nums.length;i++){
			System.out.println(nums[i]);
		}
		//4创建一个新数组
		int [] newNums=new int[nums.length*2];//创建一个大于原数组长度的新数组。将原数组中的元素依次赋值给新数组。
		//5复制元素****
		for(int i=0;i<nums.length;i++){
			newNums[i]=nums[i];
		}
		//6遍历新数组
		System.out.println("遍历新数组:");
		for(int i=0;i<newNums.length;i++){
			System.out.println(newNums[i]);
		}
	}
}
public class TestArray3{
	public static void main(String [] args){
		//1创建一个源数组
		int [] nums=new int[5];
		//2访问元素 存值
		nums[0]=11;
		nums[1]=22;
		nums[2]=33;
		nums[3]=44;
		nums[4]=55;
		//3遍历元素
		System.out.println("遍历源数组:");
		for(int i=0;i<nums.length;i++){
			System.out.println(nums[i]);
		}
		//4创建一个新数组
		//int [] newNums=new int[nums.length*2];
		//5复制元素****
		//java.util.Arrays.copyOf(原数组, 新长度);//返回带有原值的新数组。
        //int [] newNums=java.util.Arrays.copyOf(nums,nums.length*2);
		int [] newNums=Arrays.copyOf(nums,nums.length*2);
		//6遍历新数组
		System.out.println("遍历新数组:");
		for(int i=0;i<newNums.length;i++){
			System.out.println(newNums[i]);
		}
	}
}
七、数组类型参数

​ 1、A. 基本数据类型传参:值传递,一方改变不会影响另一方法。

​ 2、 引用数据类型传参:值传递(地址值),一方改变影响另一方。

public class TestArray {
	public static void main(String[] args) {
		// 数据类型:基本数据类型 8、引用数据类型
		/*
		 * 基本数据类型:作为方法参数
		 */

		/*
		 * 引用数据类型:数组
		 */
		int[] nums = { 10, 20, 30, 40, 50 };
		printArray(nums);
		System.out.println("main遍历数组:");
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i] + "\t");
		}
		System.out.println();
	}
	public static void printArray(int[] nums) {
		for (int i = 0; i < nums.length; i++) {
			nums[i] += 5;
		}
		System.out.println("printArray遍历数组:");
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i] + "\t");
		}
		System.out.println();
	}

	public static void print1(int a) {
		a += 5;
		System.out.println(a);
	}
}
八、可变长参数

​ 1、概念:可接收多个同类型实参,个数不限,使用方式与数组相同。
​ 2、语法:数据类型… 形参名 //必须定义在形参列表的最后,且只能有一个。

public class TestArray1{
	public static void main(String args[]){
		//int [] nums={1,2,3,4,5};
		//method(nums);
		
		//method();
		
		method(1, 2, 3, 4, 5);
	}
     //方法的参数作为可变长参数  数据类型... 参数名
	public static  void method(int a,int ... arr){
		System.out.println("遍历数组"+a);
		for (int i = 0; i < arr.length; i++)
			System.out.print(arr[i]+"\t");
		System.out.println();
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值