数组的特征:
- 1.定义数组必须指定大小
- 2.数组的每一个元素的内存都是连续的
- 3.数组的随机访问操作,是一个常量时间 arr[index]
- 4.每一个数组都内置了一个成员变量 length,表示数组的总长度
- 5.数组增加元素,涉及增加位置后面的所有元素都要进行移动,所以该操作花费的时间为线性时间
- 6.数组删除元素,涉及增加位置后面的所有元素都要进行移动,所以该操作花费的时间为线性时间
- 7.数组的元素查找花费时间为线性时间
数组的辅助类Arrays:
Arrays.copyOf 数组的扩容和缩容
Arrays.toString 打印数组元素
Arrays.deepToString 打印二维数组元素的值
Arrays.fill 给数组填充初始化值
Arrays.equals 比较两个数组的内容是否相同
在Arrays源码当中,可以按Ctrl+F12罗列出当前这个类所有的成员变量和成员方法
一维数组的初始化:
int[] arr0 = new int[5];
System.out.println(arr0.length);
int[] arr1 = {1,2,3,4,5};
System.out.println(arr1.length);
int[] arr2 = new int[]{1,2,3,4,5};
System.out.println(arr2.length);
数组的输出方式
int[] arr = new int[100];
Random rd = new Random();
for(int i = 0 ; i < 100 ; i ++){
arr[ i ] = rd.nextInt(100)+100;
}
//输出数组的方式一 标准的for循环
for(i = 0 ; i < arr.length ; i ++){
if( arr[i] % 2 ==0){
System.out.print( arr[i] + " ");
}
}
System.out.print();
//输出数组的方式二 foreach arr.length
for (int val : arr) {
if (val % 2 == 0) {
System.out.print(val + " ");
}
}
System.out.println();
数组的扩容:
int[] arr = new int[100];向这个数组中再放入100个元素在打印。
先给arr数组扩容。
- 1 先开辟新数组;
int[] newArr = new int[2*arr.length]; - 2把旧数组的值拷贝到新数组中;
for(int i = 0 ; i < arr.length ; i ++){
newArr[i] = arr[i];
} - 3 让arr指向新数组。
arr = newArr;
使用Arrays.copyOf()可以直接做到数组的扩容和缩容
arr = Arrays.copyOf(arr,arr.length*2);
往数组添加元素:
// 往数组添加50个整数1-50,每次添加新元素都从数组的0号位置进行添加
int count = 0;
for (int i = 0; i < 50; i++) {
// 先把数组中所有的元素都往后挪动一下
for (int j = count; j > 0; j–) {
arr[j] = arr[j - 1];
}
// 再把数据放到0号位
arr[0] = i + 1;
// 更新元素个数
count++; // arr.length
}
for (int i = 0; i < count; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
删除数组中某一位置元素:
// 把第21号位元素从arr里面删除,重新输出arr数组的元素值
for (int i = 21; i < count - 1; ++i) {
//将所删除的元素之后的每一位元素都向前提一位
arr[i] = arr[i + 1];
}
count–;
for (int i = 0; i < count; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
在数组中查找一个元素:
// 在数组中查找46,是一个线性时间
for (int i = 0; i < count; ++i) {
if (arr[i] == 46) {
System.out.println(“find 46!!!”);
System.out.println(i);
break;
}else{
System.out.println(-1);
}
}