Java学习第六章——数组

一、理解

1.数组:一次性定义多个相同类型的变量,可以存储多个数据,并且可以对多个变量进行统一

2.数组的重要因素:数据类型、数组的长度

3.数组的使用:

(1)声明数组:确定数据类型

         数据类型[] 数组名; // 建议

         数据类型 数组名[];

         数据类型 []数组名;

         int[] a;

(2)分配空间:确定数组的长度

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

         a = new int[5];

4.数组细节:

(1)数组的下标:从0开始,依次为0、1、2...数组的长度-1

(2)数组的访问:数组名+下标,数组名[下标]

(3)当访问数组时,给定的下标不合理,编译通过,运行报错,错误信息为:

        java.lang.ArrayIndexOutOfBoundsException(数组的下标越界)

(4)数组中元素进行一一访问,数组的遍历

        for(int i=0;i数组的长度;i++){

                // 通过 数组名[i] 访问数组元素

        }

(5)获取数组的长度:数组名.length

5.数组的默认值:

整数类型:0

小数类型:0.0

布尔类型:false

字符类型:空字符

引用类型:null

6.数组定义:

(1)先声明,再分配 空间

        数据类型[] 数组名;

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

(2)声明的同时分配空间:

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

(3)显式初始化:

        数据类型[] 数组名 = new 数据类型[]{数据1,数据2};

        注意:数组的长度由{}中数据的个数决定

(4)显示初始化:

        数据类型[] 数组名 = {数据1,数据2,数据3};

        注意:数组的声明和初始化一起完成

二、数组的内存

1.数组在内存的空间连续的

2.数组类型的变量粗出的是数组在内存空间的首地址

3.寻址方式:首地址+下标*数据类型的字节数

三、数组的扩容

1.思想:

(1)创建一个长度更大的新数组,通常为原数组的两倍

(2)将原数组中内容一一赋值到新的数组中

(3)新地址覆盖旧地址

2.数组扩容的实现:

(1)第一种方式:

int[] a = new int[]{1,8,4}; // 长度为3

for(int i=0;i<a.length;i++){

        System.out.print(a[i]+" ");

}

        System.out.println();

// 存储 一个新的数据 5

// 数组长度不够用,需要扩容

// 1. 定义一个更大长度的数组

int[] b = new int[a.length*2];

// 2. 将旧数组中内容,赋值到新数组中

for(int i=0;i<a.length;i++){

        // 新 = 旧

        b[i] = a[i];

}

// 3. 新地址覆盖旧地址

a = b;

System.out.println("扩容之后的结果:");

for(int i=0;i<a.length;i++){

        System.out.print(a[i]+" ");

}

System.out.println();

(2)第二种方式:借助工具类实现扩容

a=java.util.Arrays.copyOf(原数组名,新数组的长度);

四、二维数组 【开发不常用+算法应用-比赛重点+考试-不设为重点】

1.理解:一维数组的一维数组,有行和列

2.访问二维数组,通过行标和列标进行访问:数组名[ 行标][ 列标 ] (行标也称为高维,列标也成:低维)

3.二维数组的遍历:

// 通过外层循环控制行

for(int i=0;i数组名.length;i++){

        // 通过内层循环控制列

        for(int j=0;j数组名[i].length;j++){

                // 通过 a[i][j] 访问对应的数据

        }

}

五、数组的排序

1.排序:将数组中元素按照一定的顺序进行存储

2.排序的方式:从小到大

(1)冒泡排序:每次将相邻的两个元素进行比较,将较大的元素逐步往后放

        // 外层循环:控制比较的轮数

        for(int i=1;i<a.length;i++){

                // 内层循环控制每轮具体比较的内容

                for(int j=0;j<a.length;j++){

                        // 使用 a[j] 和 a[j+1] 进行比较-》相邻

                        if(a[j]>a[j+1]){

                                int temp=a[j];

                                a[j]=a[j+1];

                                a[j+1]=temp;

                        }

                }

        }

(2)第二种方式:借助工具类

        java.util.Arrays.sort(数组名);

  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值