【第五节】数组

诸位道友:

江湖路远,修行不易。我等寒窗磨剑十余载,如今剑锋将试霜雪,正是破茧之时。且看那九霄云外的登天阁,虽台阶千重,然剑气连营处,自有同道并肩而行。

一,数组的概述

定义:相同类型数据的有序集合

特点:

  • 长度固定(创建后不可改变)
  • 元素类型必须相同
  • 通过索引访问(从0开始)
  • 内存中连续存储

分类:

  • 一维数组
  • 多维数组(二维数组最常见)

二,一维数组的基本操作

①,声名与初始化

// 声明
数据类型[] 数组名;  // 推荐写法
数据类型 数组名[];  // C风格(合法但不推荐)

// 初始化方式
int[] arr1 = {1,2,3};       // 静态初始化
int[] arr2 = new int[5];    // 动态初始化(默认值:int=0, boolean=false等)
int[] arr3 = new int[]{1,2,3}; // 动态初始化带值

②,访问与修改

arr[0] = 10;          // 修改第一个元素
int num = arr[1];     // 访问第二个元素
int len = arr.length; // 获取数组长度(不是方法)

③,遍历方式

// 普通for循环
for(int i=0; i<arr.length; i++){
    System.out.println(arr[i]);
}

// 增强for循环(只读)
for(int num : arr){
    System.out.println(num);
}

// Arrays.toString()方法
System.out.println(Arrays.toString(arr));

三,多维数组(以二维数组为例)

①,声名与初始化

// 静态初始化
int[][] matrix = {{1,2}, {3,4}, {5,6}};

// 动态初始化
int[][] matrix = new int[3][2];      // 规则二维数组
int[][] matrix = new int[3][];       // 不规则数组(第二维单独初始化)

②,访问与遍历

// 嵌套循环遍历
for(int i=0; i<matrix.length; i++){
    for(int j=0; j<matrix[i].length; j++){
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}

四、数组工具类 Arrays

1,常用方法

// 排序
Arrays.sort(arr); 

// 二分查找(需先排序)
int index = Arrays.binarySearch(arr, key);

// 填充
Arrays.fill(arr, 100);  // 全部填充为100

// 数组复制
int[] copy = Arrays.copyOf(原数组, 新长度);

// 数组比较
Arrays.equals(arr1, arr2);

// 转换为List
List<Integer> list = Arrays.asList(arr);

2,注意事项

  • Arrays.asList()  返回的List不可修改
  • 多维数组比较需用 deepEquals()

五、注意事项

 

  1. 索引越界:访问时注意索引范围(0 ~ length-1)
  2. 空指针异常:数组未初始化时使用会抛出NullPointerException
  3. 数组复制
  • System.arraycopy()(高效)
  • Arrays.copyOf()(推荐)
  • clone()方法

4.性能优化

  • 优先使用一维数组
  • 避免频繁扩容(预估容量)

5.与集合的区别

  • 数组长度固定,集合可动态扩展
  • 数组可以存储基本类型,集合只能存储对象
  • 数组效率更高,集合功能更丰富

六,数组的运行原理

七,数组的应用场景与常见问题

  1. 存储固定数量的同类数据
  2. 矩阵运算
  3. 排序算法实现
  4. 缓存临时数据
  5. 作为方法参数/返回值

常见问题:

1、多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?

  • 多个数组变量中存储的是同一个数组对象的地址。
  • 多个变量修改的都是同一个数组对象中的数据。

2、如果某个数组变量中存储的为Null,代表什么意思?需要注意什么?

  • 代表这个数组变量没有指向数组对象。
  • 可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度,

会报空指针异常:NullPointerException。

八,补充知识(IDEA中Debug工具的使用)

修炼心法总纲

"数组之道,贵在守序如剑气长城,变通似陈平安破境。
初学时当如李槐持木剑,规规矩矩走桩;
精通后可学曹慈拳意,以多维数组演化天地经纬。
切记:NullPointerException乃心魔劫,Arrays类即护道人"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值