008.JAVA基础_数组的概念和基本操作


博主的 Github 地址


1. 一维数组

1.1. 数组的定义

  • 阐述:
    数组是在程序设计中为了方便处理, 把具有相同类型的若干变量,
    按照有序的形式组织起来的一种数据形式, 这个集合被称作数组. 数组中的每一个数据称为数组元素, 元素以索引来表示其存放的位置,
    索引从 0 开始, 步长是 1.

  • 定义:

    • 方式1:
      数组元素的类型[] 数组名;
      int[] ages;
    • 方式2:
      数组元素的类型 数组名[];
      int ages[];

1.2. 数组初始化

初始化有两种方式, 但不论以哪种方式进行初始化,
一旦初始化完成, 数组的长度就固定了, 不能改变,
除非重新初始化, 因此数组的长度是固定的.

  • 静态初始化

    • 特点:
      为每一个数组元素设置初始化, 数组的长度由系统决定.

    • 语法:
      数组元素类型[] 数组名 = new 数组元素类型[]{元素1, 元素2 ....};
      数组元素类型[] 数组名 = {元素1, 元素2 ....};

      • 示例
        int[] ages = new int[]{1,2,3,4};
        int[] ages = {1,2,3,4};
  • 动态初始化

    • 特点:
      先设置数组的长度, 之后再对数组元素进行添加.
    • 语法:
      数组元素类型[] 数组名 = new 数组元素类型[数组长度];
      • 示例
        int[] ages = new int[4];

1.3. 数组基本操作

1.3.1. 获取/设置/遍历元素/数组长度/索引范围
  • 获取元素:
    元素类型 变量 = 数组名[索引]
  • 设置元素:
    数组名[索引] = 要设置的值
  • 遍历元素:
    for(int index = 0; index < 数组名.length; i++){
        sout(数组名[index]);
    }
  • 数组长度: int len = 数组名.length;
    length 是属性, 不是方法
  • 索引范围:
    从 0 开始, 足以递增, 范围[0, 数组名.length - 1]
1.3.2. 操作数组常见异常
  • NullPointerException: 空指针/引用异常

    • 异常原因: 数组未初始化就操作数组
  • ArrayIndexOutOfBoundException: 数组的索引越界异常

    • 异常原因: 操作数组时填写的索引超出数组的索引范围

1.4. main 方法的数组参数

  • main 方法是 static 修饰的, 直接使用当前类调用即可.
    在底层是 JVM 通过 当前方法.main(实参) 进行调用的
    main 方法的 string 数组参数, 其实是暴露给程序运行者的,
    用于给程序传递一个数据信息. (一般不会去使用)

2. 多维数组

  • 严格上来说, java 不存在多维数组的概念, 一般称之为数组中的数组

  • 一维数组:
    数组中的每个元素都是一个值(基本类型或引用类型的值, 数组除外)

  • 二维数组:
    数组中的每个元素是一个一维数组, 每个一维数组的长度不必相同

    • 示例:
      //静态初始化
      int[][] arr = new int[][] {
        {1,2,3},
        {4,5},
        {6}
      };
      //动态初始化
      int[][] arr = new int[3][3];
  • 三维数组:
    数组中每个元素是一个二维数组, 每个二维数组的长度也不必相同

3. Java5 对数组的支持

3.1. 增强 for 循环-foreach 的浅析

  • 作用:
    迭代数组元素的时候, 只操作数组元素, 不需要去操作数组的索引

  • 语法:
    循环定义中的定义的变量, 用来接收数组中的每个元素

    for(数组元素类型 变量 : 数组名){
        //TODO
    }
  • 备注:
    实际上 foreach 在底层其实是使用 for 循环封装的,
    反编译后实际上和 for 循环一致
    但此方法大多用于获取数组元素, 精确操作数组的元素,
    还是使用 for 循环较好.

3.2. 方法的可变参数

  • 方法的可变参数其底层是由数组进行封装的

  • 传递参数时可以每次传递任意不同数量的参数,
    实际上反编译出来的结果是每次调用该方法的时候,
    都会重新创建一个根据传递参数的数量决定长度的数组

  • 为了避免参数歧义, 可变参数必须作为参数表的最后一个参数使用

  • 方法最多也只能有一个可变参数

4. 数组的一些封装好的方法

4.1. arraycopy 方法

  • 作用:
    用于数组间的拷贝, 将一个数组的值复制到另一个数组中
  • 语法:
    System.arraycopy(src, srcPos, dest, destPos, length);
  • 参数表:
    • src 表示源数组
    • srcPos 表示源数组中拷贝元素的起始位置
    • dest 表示目标数组
    • destPos 表示拷贝到目标数组的起始位置
    • length 表示拷贝元素的个数

5. Arrays 工具类

  • SUN 公司在 JDK 中提供了一个数组的工具类 Arrays
  • 类中封装了各种操作数组的方法

5.1. 几个工具类中常用的方法

  • 其它方法进行 API 查阅即可
5.1.1. toString 方法
  • 返回指定数组内容的字符串表示形式,
    字符串表示形式由数组的元素列表组成, 括在方括号[]中.
    相邻元素用字符", "(逗号加空格)进行分割.
    这些元素通过 String.valueof() 转换为字符串, 如果数组为 null, 返回 null.
5.1.2. sort 方法
  • 将数组元素由小到大进行排序, 并返回排序后的数组
  • sort(数组, 要排序的第一个元素的索引(包括), 要排序的最后一个元素的索引(不包括))
  • 后两个参数是可选参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值