数组属于引用数据类型。数组的元素,既可以是基本数据类型,也可以是引用数据类型。
创建数组对象会在内存中开辟一块连续的存储空间。
数组的长度一旦确定,就不能修改。数组一旦初始化完成,长度就确定了。
public class ArrayTest {
public static void main(String[] args) {
//1.一维数组的声明和初始化
int[] ids;//声明
//1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids=new int[]{1001,1002,1003};
//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names=new String[5];
}
}
数组元素的默认初始化值
整型 | 浮点型 | char型 | boolean型 | 引用数据类型 |
0 | 0.0 | 0或'\u0000' | false | null |
内存的简化结构
多维数组
从数组底层的运行机制来看,其实没有多维数组。
二维数组可以看成一维数组array1作为另一个一维数组array2的元素而存在。
public class ArrayTest2 {
public static void main(String[] args) {
//1.二维数组的声明和初始化
//静态初始化
int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化1
String[][] arr2=new String[3][2];
//动态初始化2
String[][] arr2=new String[3][];
}
}
//也是正确写法:
int[] arr4={1,2,3,4};
int[] arr[]= new int[][]{{1,2,3},{4,5},{6,7,8}};
int[] arr[]= {{1,2,3},{4,5},{6,7,8}};
数组的赋值与复制
赋值:将array1保存的数组的地址值赋给array2,使得array1和array2共同指向堆空间中的同一个数组实体。
array2 = array1;
复制:通过new的方式,在堆空间中开辟新的数组array2空间,将array1数组中的元素值一个一个的赋值到array2数组中。
array2 = new int[array1.length];
for(int i = 0;i < array2.length;i++){
array2[i] = array1[i];
}
冒泡排序
public class BubbleSortTest{
public static void main(String[] args){
int[] arr = new int[]{1,5,-6,9,28,-9,15};
for(int i = 0;i < arr.length - 1;i++){
for(int j = 0;j < arr.length -1 - i;j++){
if(arr[j] > arr[j+1]{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] =temp;
}
}
}
}
}
快速排序
(待补充...)
Arrays工具类的使用