一、数组的概念
定义: 数组是存储同一种数据类型的多个元素的集合。
数组既可以存储基本数据类型,也可以存储引用数据类型。
格式:
格式1: 数据类型[] 数组名;
格式2: 数据类型 数组名[];
这样定义完了,但是数组中是没有元素的,我们必须对数组进行初始化。
二、数组的初始化
Java数组必须先初始化,然后才能使用。所谓的初始化就是为数组的元素分配内存空间,并为每个数组元素赋值。
动态初始化: 初始化时只指定数组的长度,由系统为数组分配初始值。
静态初始化: 初始化时指定每个数组元素的初始值,由系统决定数组的长度。
1.动态初始化
格式: 数据类型[] 数组名 = new 数据类型[数组长度];
数组长度就是数组元素中的个数。
//定义一个int类型数组,这个数组中可以存放3个int类型的值
int[] arr = new int[3];
Java为了提高程序的效率,对数据进行了不同空间的分配,具体划分为5个内存空间,栈(存放的是局部变量)、堆(存放的是所有new出来的东西)、方法区(以后详细讲)、本地方法区(和系统相关)、寄存器(CPU使用)。
局部变量: 在方法定义中或方法声明上的变量。
内存图解
2.静态初始化
格式: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
简化: 数组类型[] 数组名 = {元素1,元素2,...};
//定义一个int类型数组,并且存放了三个值5,10,15
int[] arr = new int[]{5,10,15};
//还可以这样写
int[] arr2 = {5,10,15};
三、一维数组的常见操作
1.数组的遍历
public static void main(String[] args){
int[] arr = {1,2,3,4,5}; for(int i = 0;i < arr.length;i++){
System.out.println(arr[i]);
}
}
2.获取数组的最值
public class ArrayDemo{ public static void main(String[] args){ int[] arr = {33,22,11,55,66,77,10}; System.out.println("Max: " + getMax(arr));
System.out.println("Min: " + getMin(arr));
} //获取数组的最大值
public static int getMax(int[] arr){
int max = arr[0]; for(int i = 0;i < arr.length;i++){
max = max > arr[i] ? max : arr[i];
}
return max;
} //获取数组的最小值
public static int getMin(int[] arr){
int min = arr[0]; for(int i = 0;i < arr.length;i++){
min = min < arr[i] ? min : arr[i];
}
return min;
}
}
3.从Array中创建ArrayList
String[] arr = {"a","b","c","d"};
ArrayList<String> list = new ArrayList<String>(Arrays.asList(arr));
System.out.println(list); //[a, b, c, d]
为什么要将Array转换成ArrayList呢?可能是因为ArrayList是动态链表,我们可以更方便地对ArrayList进行增删改,我们并不需要循环Array将每一个元素加入到ArrayList中,用以上的代码即可简单实现转换。
4.检查数组是否包含某一个值
String[] arr = {"a","b","c","d"};
boolean isContain = Arrays.asList(arr).contains("b");
System.out.println(isContain); //true
先使用Arrays.asList()将Array转换成List<String>,这样就可以用动态链表的contains函数来判断元素是否包含在链表中。
5.数组的逆序
public class ArrayDemo{ public static void main(String[] args){ int[] arr = {11,22,33,44,55,66,77}; reverse(arr); for(int i = 0;i < arr.length;i++){
if( i == arr.length - 1){
System.out.print(arr[i]);
}
else{
System.out.print(arr[i] + ",");
}
}
//结果: 77,66,55,44,33,22,11
} //数组的逆序
public static void reverse(int[] arr){
for(int i = 0;i < arr.length / 2;i++){
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
}
}
四、二维数组
1.格式1
数据类型[][] 变量名 = new 数据类型[m][n];
注意:
(1)m表示这个二维数组有多少个一维数组。
(2)n表示一个一维数组的元素个数。
内存图解
2.格式2
数据类型[][] 变量名 = new 数据类型[][]{ {元素...},{元素...},...,{元素} };
简化版: 数据类型[][] 变量名 = { {元素...},{元素...},...,{元素} };
eg: int[][] arr{ {1,2,3},{4,5},{6}};
五、二维数组的常见操作
1.二维数组的遍历
public static void main(String[] args){ int[][] arr = {{1,2,3},{4,5,6},{7,8,9}}; for(int i = 0;i < arr.length;i++){ for(int j = 0;j < arr[i].length;j++){ System.out.print(arr[i][j] + " ");
} System.out.println();
}
}
结果:
1 2 3
4 5 6
7 8 9