Java_数组

06_数组

数组的概念

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

(保证有效元素连续)

特点:

1、类型相同;2、长度固定

数组的创建

//声明int数组类型变量,定义变量名为arr
int[] arr = new int[5]; //分配长度为5的连续空间

数组的使用

这里写图片描述

数组中的每个数据被称为“数组元素”

对每个元素进行复制或取值操作被称为“元素的访问”

访问元素时,需要使用“下标”(从0考试,一次+1,自动生成)

访问的语法:数组名 [下标]; 例如:存a[0]=10; 取 a[0]

下表范围:0~~数组长度-1

数组的遍历

遍历:从头到尾,逐一对数组的每个元素进行访问

数组长度:数组名.length 可以动态获取数组长度

注意:在没有为数组元素赋值的情况下依旧可以正确访问

数组的默认值:

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

数组创建语法

1、先声明、再分配空间:

int[] arr;          //数据类型[] 数组名;
arr = new int[2];   //数组名 = new 数据类型[长度];

2、声明并分配空间:

//数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];

3、声明并赋值(繁)

//数据类型[] 数组名 = new 数据类型[]{value1,value2,...};

4、声明并赋值(简)

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

数组的扩充

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

扩充数组思路:

1、创建大于原数组长度的新数组

2、将原数组中的元素依次复制到新数组中

复制数组的方式

1、循环将原数组中所有元素注意赋值给新数组

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

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

地址的替换

数组作为引用类型(数组,字符串,对象)之一,其变量中存储的是数组的地址

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

可变长参数

可接收多个同类型实参,个数不限,使用方式与数组相同

语法:

//数据类型... 形参名  (必须定义在形参列表的最后,且只能有一个)
public class TestArrayParamter{
  public static void main(String[] args) {
    //可变长参数赋予任意个数的实际参数
    printArray(11,22,33,44,55);
  }
    //定义int类型的可变长参数
  public static void printArray(int... oneArray){
    for (int i = 0;i<oneArray.length ;i++ ) {
        System.out.println(oneArray[i]);
    }
  }
}

数组的排序

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

public static void boom(){
        int[] arr = {1,5,2,7,3};
        int temp;
        for (int i = 0;i<arr.length-1 ;i++ ) {
            for (int j = 0;j<arr.length-1-i ;j++ ) {
                if(arr[j]>arr[j+1]){
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        for (int i = 0;i<arr.length ;i++ ) {
            System.out.println(arr[i]);
        }
     }

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

public static void select(){
        int[] arr = {1,5,2,7,3};
        int temp;
        for (int i=0;i<arr.length-1 ;i++ ) {
            for (int j=i+1;j<arr.length ;j++ ) {
                if (arr[i]>arr[j]) {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }               
            }
        }
        for (int i = 0;i<arr.length ;i++ ) {
            System.out.println(arr[i]);
        }
     }

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

public class TestArrayParamter{
  public static void main(String[] args) {
    int[] arr = {22,11,55,88,33};
    java.util.Arrays.sort(arr);
    for (int i = 0;i<arr.length ;i++ ) {
        System.out.println(arr[i]);
    }
  }
}

执行结果

这里写图片描述

二维数组

一维数组中的一维数组;数组中的元素还是数组

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

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

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

高维数组中的每一个元素,保存了低维数组的地址

二维数组的内存分配

高维数组中的每一个元素,保存了低维数组的地址

二维数组内存分配

二维数组的访问

二维数组的访问

array[i].length //访问低维长度array[0].length首个低维数组的长度
//访问低维数组元素:array[0][0]首个低维数组的首个元素

二维数组创建语法

1、先声明,再分配空间
//数据类型[][]  数组名;
数组名 = new 数据类型[高维长度][低维长度];
2、声明并分配空间
数据类型[][] 数组名 = new 数据类型[高维长度][低维长度];
3、声明并赋值(繁)
数据类型[][] 数组名 = new 数据类型[高维长度][];
//不规则数组,自行new低维数组
4、声明并赋值(简)
//显示初始化
数据类型[][] 数组名 = {{v1,v2,v3},{v4,v5},{v6,v7,v8,v9}};

补充


值传递

基本数据类型进行传递(赋值)拷贝的是值的副本(拷贝值的副本,一方改变,不会影响另一方)

地址传递

引用数据类型进行传递(赋值),拷贝的是地址的副本(引用传递,拷贝的是地址的副本,一方改变,会影响另一方)

函数结束,局部变量回收

public class Test{
    public static void main(String[] args) {
        int a=10;
        m(a);// int n = a; 
            //值传递:基本数据类型进行传递(赋值)拷贝的是值的副本
        System.out.println(a);  //打印的a的值为10
    }
    public static void m(int n){
        n++;
    }   //函数结束,局部变量回收
}

杨辉三角

public class TestYH{
    public static void main(String[] args) {
         test(4);
    }
    public static void test(int a){                             //a代表行数,也代表高维
        int[][] arr = new int[a][]; 

        for (int i = 0;i<a ;i++ ) {                             //每一高位的元素个数,即:行数
        arr[i] = new int[i+1];  
        for (int j=0;j<i+1 ;j++ ) {                         //每一行的元素个数
            if(j==0 || j==arr[i].length-1){                 //每行最左边和最右边为1
                arr[i][j] = 1;
            }else{
                arr[i][j] = arr[i-1][j-1]+arr[i-1][j];      //否则,元素等于上边左右元素之和
                }
            }
        }
        //遍历二维数组
        for (int i = 0;i<a ;i++ ) {
            for (int j=0;j<arr[i].length ;j++ ) {
                System.out.print(arr[i][j]+"\t");       
            }
        System.out.println();
        }
    }
}

①”+”主动类型提升;②拼接字符串;③加法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值