1.什么是数组?数组是很多个相同类型的数据,按照一定的顺序排列起来,使用一个名字命名,并且通过对这些数据进行编号来做到对他们的管理和操作
2.数组的一些概念:数组名、数组类型、数组下标(数组索引)、数组长度(数组个数)、数组元素
3.数组的特点: (1)数组是引用数据类型,数组元素可以是引用数据类型,也可以是基本数据类型
(2).数组长度一旦确定了,就不可再改变 (3)创建数组会在内存中开辟一块连续的空间 (4)数组有序
4.数组的分类:(1)数组元素可以分为基本类型元素的数组和引用类型元素的数组
(2)根据数组的维度,可以分为一维数组和多维数组
1.数组的定义:(3种写法)
第一种:数据类型[] 数组名 = new 数据类型[数组长度];
第二种:数据类型[] 数组名 = new 数据类型[]{数组元素1,数组元素2,....,数组元素n};
第三种:数据类型[] 数组名 = {数组元素1,数组元素2,.....,数组元素n}; (模糊)
例子:
int[] array1 = new int[5];//方式一
int[] array2 = new int[]{1,2,3,4,5};//方式二
int[] array3 = {1,2,3,4,5};//方式三
//静态初始化:数组的初始化和赋值同时进行
//动态初始化:数组的初始化和赋值分开进行
2.数组元素的使用(引用)
数组元素通过数组下标来调用。
注意 : 数组的下标是从0开始的,到数组的长度-1结束
例子:
public class ArrayTest{
public void static main(String[] args){
int[] array1 = new int[]{1,2,3,4};//方式二
//讲数组下标为3的元素改为0
array[3] = 0;
System.out.println(arr[3]);
}
}
3.数组的属性长度length
length表示数组的长度,可以通过数组.length调用
特殊的:数组长度一旦确定,就不能再更改了
例子:
public class ArrayTest{
public void static main(String[] args){
int[] array1 = new int[]{1,2,3,4};//方式二
//输出此数组的长度
System.out.println(array1.length);
}
}
4.一维数组的遍历
public class ArrayTest{
public void static main(String[] args){
int[] array1 = new int[]{1,2,3,4};//方式二
//一维数组的遍历
for(int i = 0;i < array1.length;i++){
System.out.println(array1[i]);
}
}
}
5.一维数组的默认初始化值
数组元素是整形:0。
数组元素是浮点型:0.0。
数组元素是char型,0或'\u0000' (特殊的)
数组元素是boolean型:false
数组元素是引用数据类型:null
6.一维数组的内存解析
例子
int[] array1;
array1 = new int[5];
array1[1]=3;
String[] array2 = new String[]{"张华","李四","黑马","张思"};
1.二维数组的理解:一个数组中嵌套数组
2.二维数组的定义
int[][] arr = new int[3][4];//第一种定义方式
int[][] arr = new int[3][];//第二种定义方式
int[][] arr = {{1,2},{3,4,5},{7,8,9}};//第三种定义方式
3.调用二位数组的元素
System.out.println(arr[0][1]);
System.out.println(arr[1][1]);
4.二维数组的长度属性
int[] arr[] = new int[][]{{1,2,3},{4,5,6,9},{7,8,9}};
System.out.println(arr.length); //为3
System.out.println(arr[1].length);//为3
System.out.println(arr[2].length);//为4
5.遍历二维数组
int[] arr[] = new int[][]{{1,2,3},{4,5,6,9},{7,8,9}};
for(int i = 0;i < arr.length;i++){
for(int j = 0; j < arr[i].length;j++){
System.out.println(arr[i][j] + " ");
}
System.out.println();
}
6.二维数组的默认初始化值
二维数组分为外层数组的元素和内层数组的元素
初始化方式一
int[][] arr = new int[1][2]
外层元素的初始值:地址值
内层元素的初始化值:看数据元素的类型,和一维数组的初始化情况类似
初始化方式二
int[][] arr = new int[2][]; //此写法错误
外层元素的初始化值为:null
内层元素的初始化值为:不可以调用否则会报错
7.二维数组的内存解析
例子
int[][] a1 = new int[3][4]{{1,2,3,4},{1,2,3,4},{1,2,3,4}};
1.针对数值型数组
求数组元素中中最大值、最小值、平均值、总和
2.数组的赋值和复制
比如有两个数组:array1 和 array2
数组的赋值:array2 = array1;
就是将array1保存的数组地址赋给了array2,他们共同指向堆空间中的同一个数组
数组的复制:
array2 = new int[array1.length];
for(int i = 0;i < array2.length;i++){
array2[i] = array1[i];
}
就是在堆空间中给array2开辟了新的数组空间,把array1数组的元素挨个赋值给array2数组中
3.数组的反转
for(int i = 0; i < arr.length / 2;i++){
String temp = arr[i];
arr[i] = arr[arr.length - i -1];
arr[arr.length - i -1] =temp;
} //方式一
for(int i = 0,j = arr.length - i - 1;j--,i++){
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
4.数组中指定元素的查找
线性查找:遍历,一个个数据进行比较
二分查找:每次比较中间值,折半的方式检索(前提是数组必须是有序的)
5.数组的排序算法(见数据结构)
它是定义在java.util包下的,提供了许多操作数组的方式。
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)
int binarySearch(int[] a,int key)
int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
int index = Arrays.binarySearch(arr3, 210);
if(index >= 0){
System.out.println(index);
}else{
System.out.println("未找到");
}
1.空指针异常:NullPointerException
2.数组角标越界:ArrayIndexOutOfBoundsException