欢迎光临
我们一直在努力

数组知识点

 

一、数组基础

 

1. 含义:一块可以批量存放同种类型数据的容器,能一次性批量处理容器内所有数据。

2. 使用数组三步走:

① 声明数组:确定存储的数据类型,给数组取名

推荐写法: 数据类型[] 数组名;  例: int[] a; 

也可简写: int a[]; 

② 开辟存储空间:规定数组最多能存多少个数据(也就是数组长度)

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

③ 操作数组(基础必学)

 

– 数组里每一条单独数据叫数组元素

– 数组操作分两类:存数据、取数据

– 存取依靠「数组名+下标编号」实现:

存值: 数组名[下标] = 数值; 

取值: 数组名[下标] 

– 数组每个格子都有专属编号,这个编号就是下标,下标从0开始,最大下标=数组总长度-1

– 踩坑提醒:如果使用超出  0 ~ 数组长度-1  范围的下标,代码编译不会报错,但运行会直接报错,报错提示:数组下标越界(ArrayIndexOutOfBoundsException)

 

数组扩容工具

 

1. 拷贝方法参数说明:

第4个参数:新数组从哪个位置开始存放复制过来的数据

第5个参数:需要复制多少个元素

2. 简化扩容方法  Arrays.copyOf() 

一行代码完成「创建更长的新数组 + 复制原数组全部内容」

参数1:需要扩容的原始数组

参数2:自定义新数组的长度

示例代码:

 

java

int[] a = {1,6,8,3};

// 把数组扩容为原来2倍长

int[] b = Arrays.copyOf(a,a.length*2);

// 让原数组变量指向扩容后的新数组

a = b;

 

 

二、可变长参数(读源码、调用工具类时很常见)

 

1. 定义:方法可以接收数量不固定的实参,JDK5版本新增功能

2. 特点:传参个数由调用代码自由决定,只能接收同一种数据类型的数据

3. 基础语法: public static 返回值 方法名(数据类型…参数名){} 

4. 使用逻辑:可变长参数底层会自动转换成对应类型的数组,方法内部直接把它当成数组使用即可

示例代码:

 

java

public static void fun(int…a){ // 自动生成int数组a

    System.out.println("方法执行");

    System.out.println("数组长度:"+a.length);

    // 直接用循环遍历数组

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

        System.out.println(a[i]);

    }

}

 

 

5. 硬性语法规则:一个方法里最多只能有1组可变长参数,且必须写在所有普通参数的末尾

6. 优势:让方法适配更多场景,代码更灵活通用

 

三、数组排序(面试高频考点)

 

1. 冒泡排序

 

思路:逐一比对相邻两个数字,把更大的数字逐步往后挪动,最终实现从小到大排列

 

java

// 外层循环:控制总比较轮次,最多循环【数组长度-1】轮

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

    // 内层循环:每一轮内部相邻元素两两对比

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

        // 前一个数字比后一个大,就交换两者位置

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

            int temp = a[j];

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

            a[j+1] = temp;

        }

    }

}

 

 

2. 选择排序

 

思路:固定一个位置的数字,拿它和后面所有数字挨个对比,把更小的数字逐步换到前面,实现升序排列

 

java

// 外层循环:控制每一轮固定对比的基准位置

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

    // 内层循环:拿基准位置数字和后面全部数字对比

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

        // 后面数字更小,交换两者

        if(a[i]>a[j]){

            int temp = a[i];

            a[i] = a[j];

            a[j] = temp;

        }

    }

}

 

 

3. 工具快速排序

 

直接调用工具类自带排序方法: java.util.Arrays.sort(数组名) ,底层是高效快速排序,日常开发优先使用

 

四、二维数组(了解即可)

 

1. 基础语法

 

① 声明: 数据类型[][] 数组名; 

② 分配空间: 数组名 = new 数据类型[行数][列数]; 

行数=高维,列数=低维

 

2. 二维数组使用方式

 

① 访问元素: 数组名[行下标][列下标] ,行、列下标都从0开始

例: a[0][3]  代表第1行第4列的数据

② 默认值规则:二维数组和普通一维数组一样,创建后自带默认初始值

③ 获取长度:

获取总行数: 数组名.length 

获取某一行的列数: 数组名[行下标].length 

补充:二维数组本质是「存放一维数组的一维数组」

 

3. 二维数组多种定义写法

 

1. 声明同时开辟空间: 数据类型[][] 数组名 = new 数据类型[行数][列数]; 

2. 直接赋值初始化: 数据类型[][] 数组名 = new 数据类型[][]{{值1,值2},{值3,值4}}; 

注意:大括号里每组数字的数量代表每行有多少列,这里不能手动写出行、列数值

3. 简写初始化: 数据类型[][] 数组名 = {{值1,值2},{值3,值4}}; 

注意:变量声明和初始赋值必须写在同一行

 

4. 不规则二维数组

 

1. 特点:数组里每一行包含的元素数量(列数)互不相同

2. 不规则数组定义方式

① 先定义总行数,再单独给每一行单独开辟列空间

 

java

// 只规定总行数,不定义列数

数据类型[][] 数组名 = new 数据类型[行数][];

// 单独为每一行分配不同长度

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

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

 

 

注意:二维数组初始化时可以只指定行数(高维),不能只写列数(低维)

② 直接赋值不规则数组: 数据类型[][] 数组名 = {{1},{1,2,3},{1,2}};

赞(0)
未经允许不得转载:171主机测评 » 数组知识点
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址