数组
概述
是多个相同类型数据按照一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对数据进行统一管理
数据名
下标或索引
元素
数组的长度
定义一个数组类型的变量,使用数组类型“类型[]”,例如,int[]
。和单个基本类型变量不同,数组变量初始化必须使用new int[5]
表示创建一个可容纳5个int
元素的数组。
要访问数组中的某一个元素,需要使用索引。数组索引从0
开始,例如,5个元素的数组,索引范围是0
~4
。
可以修改数组中的某一个元素,使用赋值语句,例如,ns[1] = 79;
。
Java的数组有几个特点:
- 数组是引用数据类型
- 数据元素既可以是基础数据类型也可以是引用数据类型
- 数据在内存中是连续的(链表是分散的)
- 数据的长度一旦创建后,不可修改
- 数组所有元素初始化为默认值,整型都是
0
,浮点型是0.0
,布尔型是false,对象是null,详见,下面代码
;分类
维数
一维数组、二维数组、多维数组元素
基本数据类型的数组、引用数据类型的数组数组的使用
- 一维数组的声明和初始化
- 如何调用数组的指定位置和元素
- 如何获取数组的长度
- 如何遍历数组
- 数组元素的默认初始值
- 数组的内存解析
public static void main(String args[]){
//声明
int ids[];
//静态初始化:数组初始化和元素复制同时进行
ids = new int[]{1,2,3,4};
//动态初始化:数组的初始化和数组元素的赋值分开进行
String names = new String[4];
//初始化的定义
String[] a = {"22","44"};
//错误定义
//未定义长度
String a = new String[];
//[10]这里声明,定义长度在等号右边
String[10] b = new String[10];
//动态数组,先声明再赋值
String[] a = new String[12]{"22","44"};
//调用数组指定位置和元素
//声明数组后在初始化数组
names[0] = "1";
names[1] = "2";
names[2] = "3";
names[3] = "4";
//此时后面的数据将不能赋值,数组下标越界,初始化的时候数组长度只有4
names[4] = "5";
names[5] = "6";
//获取数组长度
String length = names.length();
//遍历数组
for(int a=0; a< length; a++){
System.out.println(names[a]);
}
//数组元素的初始化值
//数组元素是整数 初始化的值为 0
// 数组元素是浮点型 初始化的值为 0.0
// 数组元素是char型,初始化的值为 '0' 不是数值类型的0
// 布尔类型 ,初始化的值为 false
// 引用数据类型,初始化的值为null
int intArr = new int[3];
}
数组的内存解析
public static void main(String[] args){
int arr[] = new int[]{1,2,3};
String[] arr1 = new String[4];
arr1[1] = "哈";
arr1[2] = "你";
arr1 = new String[3];
}
多维数组的使用
二维数组
- 一维数组的声明和初始化
- 如何调用数组的指定位置和元素
- 如何获取数组的长度
- 如何遍历数组
- 数组元素的默认初始值
数组的内存解析 ```java public static void main(String[] args){ // 1、二维数组的声明和初始化 // 一维数组初始化 int[] arr = new int[]{1,2,3}; // 静态初始化 int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}}; // 动态初始化1 String[][] arr2 = new String[2][3]; // 动态初始化2 String[][] arr3 = new String[2][]; // 错误的情况 String[][] arr4 = new String[][2]; String[2][3] arr5 = new String[][]; int[][] arr6 = new int[3][2]{{1,2,3},{4,5},{6,7,8}};
// 2、获取指定位置的元素
arr6[2][1];
// 获取数组的长度 // 3、获取的是一维数组的长度 arr6.length();// 3 // arr6[0]的长度 3 // 4、数组遍历 for(int i=0; i < arr6.length; i++){
for(int j=0; j<arr6[i].length; j++){ System.out.println(arr6[i][j]); }
} // 5、数组元素的默认初始化值 int[][] arr = new int[3][4]; System.out.println(arr[0]); // 是个地址值 [@1312321 System.out.println(arr[0][0]); // 0 System.out.println(arr); // [[@6546545
String[][] arr = new String[3][4]; System.out.println(arr[0]); // 是个地址值 [@1312321 System.out.println(arr[0][0]); // null System.out.println(arr); // [[@6546545
int[][] arr = new int[3][];
System.out.println(arr[0]); // null
System.out.println(arr[0][0]); // 报错,空指针
// 初始化值 : 总结
初始化方式一: int[][] arr = new int[3][4];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组的初始化情况相同
初始化方式二: int[][] arr = new int[3][];
外层元素的初始化值为:null
内层元素的初始化值为:空指针异常
二维数组的内存结构
数组的常见算法
1、数组元素的赋值(杨辉三角、回形数)
2、求数值类型数组中元素的最大值、最小值、平均数、总和等
3、数组的复制、反转、查找(线性查找、二分法查找)
4、数组元素的排序算法
冒泡排序(降序、升序)
快速排序
Arrays 工具类 操作数组工具类
equals(int[] a, int[] b)
toString(int[] a)
fill(int[] a, int val)
sort(int[] a)
binarySearch(int[] a, int key)
数组中的异常
数组角标越界的异常
空指针异常