数组的定义
- 一组连续的存储空间(长度固定),存储多个相同数据类型的值;
- 数组长度为5的一个数组,它的下标从0~4;
- 数组名[0]; 代表数组中第一个位置的值;
- 有效下标范围:0~数组长度-1;
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExeption:长度;(下标越界)
数据类型[] 数组名 = new 数据类型[数组长度];
数据类型[] 数组名 = new 数据类型[]{值1,值2,值3...};
数据类型[] 数组名 = {值1,值2,值3...};
数组的遍历
- 使用循环变量“ i ”充当下标逐一访问数组中的每一个元素
- 数组名.length 可获取动态数组长度
public static void main(String[] args){
for(i=0;i<数组名.length;i++){
System.out.println(a[i]);
}
}
数组的扩容
创建大于原数组长度的新数组=>将原数组的元素依次复制到新数组中
完成元素复制后,需要将新数组中的地址赋值给原数组进行替换 newArray=oldArray;
- 循环将原数组的元素逐一复制给新数组
for (int i = 0; i < oldArray.length; i++) {
newArray[i]=oldArray[i];
}
- System.arraycopy(原数组,原数组起始位置,新数组,新数组起始位置,长度)
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
for (int i = 0; i < newArray.length; i++) {
System.out.print(newArray[i]+" ");
}
- Arays.copyOf(原数组,新长度)
oldArray=Arrays.copyOf(oldArray, oldArray.length+2);
可变长参数
可接收多个同类型实参,个数不限,使用方式和数组相同,必须定义在最后且只能有一个
public static void print2(int... oldArray) {
for (int i = 0; i < oldArray.length; i++) {
System.out.print(oldArray[i]+" ");
}
}
数组的排序
- 冒泡排序:相邻的两个数值比较大小、互换位置
public static void maoPaoSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
print(arr);
System.out.println();
}
- 选择排序:先定义一个固定值,将固定值与其他值依次进行比较、互换位置
for (int i = 0; i < arr.length - 1; i++) {
int min_index = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min_index]) {
min_index = j;
}
}
if (min_index != i) {
int temp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = temp;
}
}
print(arr);
- JDK排序(升序)
java.util.Arrays.sort(数组名);
二维数组
数组类型[][] 数组名 = new 数据类型[高维长度][低维长度];
数组类型[][] 数组名 = new 数据类型[高维长度][]; //不规则数组自行new低维数组
数组类型[][] 数组名 = {{v1,v2,v3},{v4,v5},{v6}}; //显示初始化