数组概述

数组的定义

数组是相同类型数据的有序集合

数组描述的是相同类型的若干个数据,按照一定的先后循序排列组合而成。

其中,每一个数据称作一个数组元素,每个数组元素可以通古通过一个下标来访问他们

数组声明创建

声明数组变量的语法:

dataType[] arrayRefVar; // 首选方法
dataType arrayRefVar[]; // 效果相同,但不是首选方法

java使用new操作符来创建数组,语法如下:

dataType[] arrayRefVar = new dataType[arraySize];

数组的元素是通过索引访问的,数组索引从0开始

或者数组长度的: arrays.length;

三种初始化

静态初始化

int[] a = {1, 2, 3};
Man[] mans = {new Man(1, 1), new Man(2, 2)};

动态初始化

int[] a = new int[2];
a[0] = 1;
a[1] = 2;

默认初始化

数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量的方式被隐式初始化。

数组使用

通过下标来访问数组中的元素。

遍历

遍历是依次取出数组中的每一个元素。

普通for循环遍历

语法:

for(int i = 0; i < 数组的长度; i++){
	数组中元素的类型 变量 = 数组名[i];
}

增强型for循环遍历

语法:

for(数组中元素的类型 变量名:数组名 ){
	数组中的元素类型 临时变量 = 变量;
}

空指针异常

当一个变量为null(没有赋值)时,我们去调用了该变量的属性和方法。就会提示java.lnag.NullPointerException

下标越界

当访问超过数组长度的下标时,就会出现下标越界。java.lang.ArrayIndexOutOfBoundsException

Arrays类

用来操作数组(比如排序和搜索)的各种方法

常用的一些方法:

1、使用二分法查找 Arrays.binarySearch(int[] array, int value);

public static void main(String[] args) {
    int[] nums_1 = {10, 20, 30, 40, 50, 60};
    // 第一个参数是被查找的数字,第二个参数是需要查找的数
    int index = Arrays.binarySearch(nums_1, 60);
    System.out.println("下标是:" + index);
}

2、数组内容转成字符串的形式输出 Arrays.toString(int[] array);

public static void main(String[] args) {
    int[] nums_1 = {10, 20, 30, 40, 50, 60};
    System.out.println(Arrays.toString(nums_1));
}

3、数组排序 Arrrays.sort(int[] array);

public static void main(String[] args) {
    int[] nums_2 = {31, 35, 43, 4, 88, 62};
    // 在原数组的基础上进行排序,不返回新的数组对象
    Arrays.sort(nums_2);
    System.out.println(Arrays.toString(nums_2));
}

4、复制指定的数组

public static void main(String[] args) {
    int[] nums_2 = {31, 35, 43, 4, 88, 62};
	// 第一参数是需要被复制的数组,第二个参数是返回的新数组的长度
	int[] nums_3 = Arrays.copyOf(nums_2, 10);
    // 结果:[31, 35, 43, 4, 88, 62, 0, 0, 0, 0]
	System.out.println(Arrays.toString(nums_3));
    

    int[] nums_5 = new int[10];
    // 第一个参数是原数组,第二个参数是原数组的起始位置
    // 第三个参数是新数组,第四个参数是新数组起始位置,第五个参数是要复制原数组的元素个数
    System.arraycopy(nums_2, 0, nums_5, 0, nums_2.length);
    // 结果:[31, 35, 43, 4, 88, 62, 0, 0, 0, 0]
    System.out.println(Arrays.toString(nums_5));
   
    
    // arraycopy性能优于Array.copyOf. 因为copyOf 基于arraycopy实现
}

5、判断两个数组的值是否相等 Arrays.equals(int a, int b);

public static void main(String[] args) {
    int[] nums_1 = {10, 20, 30, 40, 50, 60};
    int[] nums_2 = {31, 35, 43, 4, 88, 62};
	System.out.println(Arrays.equals(nums_1, nums_2));
}

6、使用指定元素填充数组 Arrays.fill()

public static void main(String[] args) {
    int[] nums_6 = new int[10];
    Arrays.fill(nums_6, 1); // 结果:[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
}