7.数组

  1. 知识回顾
    1. 以前学习过变量,我们知道变量可根据需要存储不同的数据,但是它在同一时间只能存储一个数据
    2. 如果程序需要在同一时间处理多个数据,如果只用变量,就需要定义很多的变量,效率不高,数组就可以解决此问题了
  2. 什么是数组
    1. 相同数据类型的数据集合
    2. 分类
      1. 一维数组
      2. 二维数组(实际上还是一维数组)
  3. 数组的作用
    1. 可存储多个相同数据类型的数据
  4. 如何使用数组
    1. 一维数组定义语法(思路同变量,语法不同)

      1. 先声明后赋值

      2. 声明并赋值

    2. 一维数组基本特征

      1. 线形记录数据(根据单个下标访问数据)

      2. 数组下标

        1. 它是数组中每个数组的索引,从0开始,依次加1
      3. 数组的长度

        1. 数组能存储数据的个数
        2. 它的值是数组的length属性的值
        3. length = 最大小标 + 1
    3. 一维数组的增删改查(遍历)->对数据的操作就这四种

        1. 数组一旦定义长度是无法改变的,无法新增数组了
        1. 数组一旦定义长度是无法改变的,无法真正删除数据,只能将数据修改成初始值
        1. 重新赋值即可:数组名[下标] = 新值
      1. 查(各种查法)
        1. 遍历数组(查所有数据)

          1. 使用JDK提供的方法(拿来主义:万能的百度)

            1. Arrays类的toString(数组名称)方法,即可输出数组中所有数据
          2. 自己编码(还是提倡吧,有益大脑,实际开发就拿来主义吧!)

            1. 依次获取数组中的数据,对于这种重复性操作可以使用循环来完成
            2. 语法
        2. 找出极值(查最大值与最小值)

          1. 使用JDK提供的方法(拿来主义:万能的百度)
            Arrays.steam(数组名).max()或.min().getAsInt()

            Arrays.sort(数组名);然后根据下标找极值,缺点是"改变了数组中元素顺序"

          2. 自己编码(先假定数组中下标为0的为极值,然后依次与其它数比较,找到真正极值后重新赋值给变量即可)

        3. 排序(升序)

          1. 使用JDK提供的方法(拿来主义:万能的百度)
            Arrays.sort(数组名称),需要导入java.util.Arrays

          2. 自己编码
            选择排序(选择数组中第一个数,然后依次与后面的数比较,把最小的放前面,最大放后面)

            冒泡排序(相信元素比较,小的排前,大的排后)

             ![](https://images2018.cnblogs.com/blog/1009428/201808/1009428-20180826151523112-1052283852.png)
            
        4. 反转(降序)

          1. 如此简单,没有API,自己写吧

            1. 使用循环从一个数组中取出,然后写入另一个数组中,注意下标的变换(有两种写法)
          2. 如果,反转前是升序,那么反转后就是降序了

        5. 查找数组中某元素的下标(某元素是否存在)

          1. 使用API(是排序后的下标,但是可以排序是否存在该元素)

          2. 自己编码(使用循环依次遍历)

        6. 其它操作

          1. 将指定数组的指定范围复制到一个新数组。 包含起始位置但不包含结束位置
            1. Arrays.copyOfRange(int[] arr,int from,int to);它的返回值是一个数组
    4. 一维数组的常见异常

      1. ArrayIndexOutOfBoundsException:数组索引超出了边界异常,简洁点(数组下标越界)

        1. 根本原因:操作的数组没有此下标,但是你非要访问

      2. NullPointException:空指针异常(空对象不再指向堆内存了)

    5. 二维数组定义语法(二维数组本质也是一维数组,底层按一维数组处理的)

      1. 先声明后赋值

      2. 声明并赋值

    6. 二维数组的基本特征

      1. 矩阵记录数据(当然实际上在内存中还是线型,这样是方便理解)
      2. 外层数组下标与lenght,内层每一个数组的下标与length(理解同一维数组)
        1. 下标
        2. 数组长度
    7. 二维数组的增删改查(遍历)

        1. 数组一旦定义长度是无法改变的,无法新增数组了
        1. 数组一旦定义长度是无法改变的,无法真正删除数据,只能将数据修改成初始值
        1. 重新赋值即可:数组名[外层下标][内层下标] = 新值
      1. 查(所有操作都是转换成一维数组后来实现的:外面多加一个循环即可)
        1. 遍历数组(查所有数据)
          1. 使用JDK:还能使用toString()而是使用deepToString()
          2. 自己编码
        2. 找极值,排序,反转,查找
          1. 都是将二维数组转换成一个个一维数组中然后进行操作的
    8. 总结

      1. 如果只知道数组的长度,可以使用先声明的方式定义数组,此时数组中存储的数据根据类型有相应的默认值
      2. 数组的操作离不开循环(数组本身就是重复性存储数据的)
      3. 解决问题可采用降维方式,思考问题可采用多维方式
        1. 把二维数组的操作,转换成一维问题来解决
        2. 一维数组搞不定的问题,可尝试用多维数组来解决
      4. java也有3维,4维数组,但是实际用处不大(理论是无止境的)
原文地址:https://www.cnblogs.com/River111/p/9537521.html