Java基础编程 - 3、数组

1 数组的概述

概念

数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式

对这些数据进行统一管理。

数组的常见概念
  • 数组名
  • 下标(或索引)
  • 元素
  • 数组的长度
数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。  数组的长度一旦确定,就不能修改。
我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
数组的分类:
  • 按照维度:一维数组、二维数组、三维数组、…
  • 按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)
    数组元素的默认初始化值
  • 数组元素是整型:0
  • 数组元素是浮点型:0.0
  • 数组元素是char型:0或’\u0000’,而非’0’
  • 数组元素是boolean型:false
  • 数组元素是引用数据类型:null

    2 一维数组的使用

  • ① 一维数组的声明和初始化
  • ② 如何调用数组的指定位置的元素
  • ③ 如何获取数组的长度
  • ④ 如何遍历数组
  • ⑤ 数组元素的默认初始化值 :见ArrayTest1.java
  • ⑥ 数组的内存解析 :见ArrayTest1.java

    3 多维数组的使用

二维数组的使用

1.理解:
对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。
其实,从数组底层的运行机制来看,其实没有多维数组。

  1. 二维数组的使用:
    ① 二维数组的声明和初始化
    ② 如何调用数组的指定位置的元素
    ③ 如何获取数组的长度
    ④ 如何遍历数组
    ⑤ 数组元素的默认初始化值 :见 ArrayTest3.java
    ⑥ 数组的内存解析 :见 ArrayTest3.java

4 数组中涉及到的常见算法

  1. 数组元素的赋值(杨辉三角、回形数等)
  2. 求数值型数组中元素的最大值、最小值、平均数、总和等
  3. 数组的复制、反转、查找(线性查找、二分法查找)
  4. 数组元素的排序算法

排序算法分类:内部排序和外部排序。

  • 内部排序:整个排序过程不需要借助于外部存储器(如磁盘等),所有排序操作都在内存中完成。
  • 外部排序:参与排序的数据非常多,数据量非常大,计算机无法把整个排序过程放在内存中完成,必须借助于外部存储器(如磁盘)。外部排序最常见的是多路归并排序。可以认为外部排序是由多次内部排序组成。
十大内部排序算法
  • 选择排序
    • 直接选择排序、堆排序
  • 交换排序
    • 冒泡排序、快速排序
  • 插入排序
    • 直接插入排序、折半插入排序、Shell排序
  • 归并排序
  • 桶式排序
  • 基数排序

5 Arrays工具类的使用

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种方法。

1 boolean equals(int[] a,int[] b) 判断两个数组是否相等。
2 String toString(int[] a) 输出数组信息。
3 void fill(int[] a,int val) 将指定值填充到数组之中。
4 void sort(int[] a) 对数组进行排序。
5 int binarySearch(int[] a,int key) 对排序后的数组进行二分法检索指定的值。

6 数组使用中的常见异常

数组脚标越界异常(ArrayIndexOutOfBoundsException)
1
2
3
4
int[] arr = new int[2];
System.out.println(arr[2]);
System.out.println(arr[-1]);
// 访问到了数组中的不存在的脚标时发生
空指针异常(NullPointerException)
1
2
3
int[] arr = null;
System.out.println(arr[0]);
// arr引用没有指向实体,却在操作实体中的元素时