千锋学习day07 数组

数组

数组的概念

概念:一组连续的存储空间,存储多个i相同数据类型的值

特点:1、类型相同 2、长度固定

数组的创建

public class Test1{
	public static void main(String[] args){
        //声明int数组类型变量定义变量名为a
        int[] a = new int[5];
        //分配长度为5的连续空间
    }
}

数组的组成

  • 数组中的每个数据格被称为"数组元素"
  • 对每个元素进行赋值或取值的操作被称为"元素的访问"
  • 访问元素时,需要使用"下表"(从0开始,依次+1,自动生成)
  • 访问语法:数组名[下表]//例如 存 a[0] =10; 取a[0];

数组的使用

public class Test2{
    public static void main(String[] args){
        //创建数组
        int[] a = new int[5];
        //依次赋值
        a[0] = 5;
        a[1] = 3;
        a[2] = 4;
        a[3] = 7;
        a[4] = 10;
        //依次取值
   		System.out.println(a[0]);
        System.out.println(a[1]);
        System.out.println(a[2]);
        System.out.println(a[3]);
        System.out.println(a[4]);
    }
}
/*
运行结果
5
3
4
7
10
*/

下表范围

public class Test3{
	    public static void main(String[] args){
        //有效下表范围:0~数组长度-1
        int[] a = new int[5];
        a[0] = 5;
        a[1] = 3;
        a[2] = 4;
        a[3] = 7;
        a[4] = 10;
   		System.out.println(a[0]);
        System.out.println(a[1]);
        System.out.println(a[2]);
        System.out.println(a[3]);
        System.out.println(a[4]);
        //访问无效下标,会导致数组下标越界
        System.out.println(a[5]);
    }
}

java.lang.ArrayIndexOutofBoundsException:数组下标越界异常

运行时异常

数组的遍历

便利:从头至尾,逐一对数组的每个元素进行访问

public class Test4{
	public static void main(String[] args){
        int[] a = new int[5];
        a[0] = 5;
        a[1] = 3;
        a[2] = 4;
        a[3] = 7;
        a[4] = 10;
        //数组名.length可以动态获得数组长度
        for(int i = 0; i<a.length;i++){
            //使用循环变量"i"充当下标,逐一访问数组钟的每个元素
            System.out.println(a[i]);
        }
}

数组的默认值

public class Test5{
    public static void main(String[] args){
        int[] a = new int[5];
        for(int i = 0; i < 5; i++){
            //在没有数组元素赋值的情况下,依旧可以正确访问
            System.out.println(a[i]);
        }
    }
}

数组的默认值:

  • 整数:0
  • 小数:0.0
  • 字符:\u0000 (空格)
  • 布尔:false
  • 其他:null

数组创建语法

  • 先声明、再分配空间:

    数据类型[] 数组名

    数组名 = new 数据类型[长度]

  • 声明并分配空间:

    数据类型[] 数组名 = new 数据类型[长度]

  • 声明并赋值(繁)

    数据类型[] 数组名 = new 数据类型[]{value1,value2,value3,…}

  • 声明并赋值(简)

    数据类型[] 数组名 = {value1,value2,value3,…} //显示初始化,注意:不可换行

课堂案例

给定一个整数数组,统计数组中所有元素的平均值

package com.zcs.test;

public class Test1 {
	public static void main(String[] args) {
		int[] a = { 1, 2, 3, 4, 5 };
		int sum = 0;
		for (int i = 0; i < a.length; i++) {
			sum += a[i];
		}
		System.out.println(sum/a.length);
	}
}

给定一个整数数组,读入一个整数n,如果n在数组中存在,输出下标,不存在输出-1;

package com.zcs.test;

import java.util.Scanner;

public class Test2 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		int num = input.nextInt();
		int[] a = { 22, 33, 44, 55, 66 };
		int count = 0;
		for (int i = 0; i < a.length; i++) {
			if (num == a[i]) {
				System.out.println("数组下9标为:" + i);
				break;
			}else {
				count++;
			}
		}
		if(a.length == count) {
			System.out.println(-1);
		}
		System.out.println("程序结束");
	}
}

数组扩容

创建数组时,必须显示指定长度,并在创建之后不可改变长度。

扩容思想:

  • 创建大于原数组长度的新数组
  • 将原数组中的元素依次复制到新数组中

复制方式

循环将原数组中所以元素逐一赋值给新数组

System.arraycopy(原数组,原数组起始,新数组,新数组起始,长度)

java.util.Arrays.copyOf(原数组,新长度)//返回带有原值的新数组

地址的替换

数组作为引用类型之一,其变量中存储的是数组的地址

完成元素复制后,需将新数组地址,赋值给原变量进行替换

数组类型的参数

public class Test6{
	public static void main(String[] args){
        //假设nums地址为:oxoooA001
        int[] nums = {111,222,333,444,555};
        //参数传入后oneArray地址为:oxooooA001
        printArray(nums);
    }
    public static void printArray(int[] oneArray){
        for(int i = 0; i < oneArray.length; i++){
            System.out.println(oneArray[i]);
        }
    }
}

方法调用时,将nums中的地址赋值给oneArray,此时二者指向同一个数组

传递参数时,基本类型传递的是变量中的值,应勇类型传递的是变量中的地址

数组类型的返回值

public class Test7{    public static void main(String[] args){        int[] oa= {111,222,333,444,555};//ox000A111        //na变量接收expand返回的新数组        int[] na = expand(oa);        for(int i = 0; i < na.length; i++){            System.out.println(na[i]);        }    }    public static int[] expand(int[] oldArray){//ox000A111        //创建长度为2倍的新数组,保留原数据        int[] newArray = new int[oldArray.length*2];//ox0000B222        for(int i = 0; i < oldArray.length;i++){            newArray[i] = oldArray[i];        }        //返回长度为10的newArray        return newArray;//ox0000B222    }}

调用数组类型返回值的方法时,方法执行后,返回的是数组的地址

可变长参数

概念:可接收多个同类型实参,个数不限,使用与数组相同

语法:数据类型…形参名//必须定义在形参列表的最后,且只能有一个

public class Test8{	public static void main(String[] args){        //可为可变长参数赋予 0~N个实际参数        printArray(111,222,333,444,555);    }    public static void printArray(int... oneArray){        for(int i = 0; i < oneArray.length;i++){            System.out.println(oneArray[i]);        }    }}

数组的排序

冒泡排序:相邻的两个数值比较大小,互换位置

选择排序:固定值与其他值依次比较大小,互换位置

JDK排序:java.util.Arrays.sort(数组名);JDK提供(升序)

二位数组

概念:一维数组中的一维数组;数组中的元素还是数组

当查找excel中的某个单元格时,需要两个下标:n代表行,m代表列,

二维数组相当于多一个多行多列的表格

二位数组的赋值

public class Test9{	public static void main(String[] args){		int[] array = new int[3][5];		array[0][0]=10;		array[0][0]=20;		array[1][1]=30;		array[1][2]=40;		array[2][4]=50;	}}

使用双下标访问二维数组中的元素,

第一个下标代表:行号(高维下标)

第二个下标代表:列号(低维下表)

二维数组的内存分配

高维数组中的每一个元素,保存了低维数组的地址。访问array[0]等价于访问0x0000A111;

二位数组创建语法

  • 先声明、再分配空间:

    数据类型[][] 数组名;数组名 = new 数据类型[高维长度][低维长度]
    
  • 声明并分配空间:

    数据类型[][] 数组名 = new 数据类型[高维长度][低维长度]
    
  • 声明并赋值(繁)

    数据类型[][] 数组名 = new 数据类型[高维长度][]//不规则数组,自行new低维数组
    
  • 声明并赋值(简)

    数据类型[][] 数组名 = new {{v1,v2,v3},{v4,v5},{v6,v7,v8,9}};//显示初始化
    

总结

  • 数据的概念

    一组连续的存储空间,存储多个相同数据类型的值

  • 数据的声明与赋值

    数据类型[] 数组名 = new 数据类型[长度];

    数组名[下标] = 值;

  • 数组的遍历

    从头至尾,逐一对数组的每个元素进行访问

  • 数组的排序

    冒泡排序、选择排序、JDK快速排序

  • 数组的应用

    数组复制、数组扩容、数组参数、数组返回值、二维数组

增强for循环

package com.zcs.lession08;public class Demo6 {	public static void main(String[] args) {		int[] a = {21,22,23,24,25,26};				//增强for		=>for..each		/*		 * int wahaha 声明了1个int类型的变量		 * :后面写的是集合=>数组		 * */		//展示遍历,取值遍历的		for(int wahaha:a) {			wahaha=111;			System.out.println(wahaha);		}		System.out.println("=============");		for (int i : a) {			System.out.println(i);		}	}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值