目录
是一种引用数据类型
相同数据类型元素的集合 可以将数组理解为-----柜子[]
1.定义
数据类型数组 [] 数组名 = new 数据类型【元素个数】;
//1)数组的定义:
//声明整型数组a,包含5个元素,每个元素都是int类型,默认值为0
int[] a = new int[5];
//声明浮点型数组d,包含10个元素,每个元素都是double类型,默认值为0.0
double[] d = new double[10];
//声明布尔型数组c,包含26个元素,每个元素都是boolean类型,默认值为false
boolean[] c = new boolean[26];
2.数组的初始化:动态/静态初始化
//2) 数组的初始化---初始化的是数组中的数据
int[]arr =new int[5];//000 动态初始化
int[]arr2=new int[]{2,5,8};//静态初始化
int[]arr1={2,5,8};//静态初始化省略格式
int[]arr3;
//arr3=[2,5,8];编译错误,静态初始化省略格式只能声明同时初始化
arr3=new int[]{2,5,8};
动态初始化时的默认值:
byte,short,int,long,char--------------0
float,double--------------------------0.0
boolean-------------------------------false
3.访问---长度 数组[下标]
- 通过 (数组名.length)获取数组的长度(元素个数)
- 通过下标/索引 数组[下标]来访问数组中的元素,下标从0开始,最大到(数组的长度-1)
int[]arr=new int[3];
System.out.println("arr的长度"+arr.length);//输出数组长度
System.out.println(arr[0]);//输出数组第一个数的值
arr[0]=100;
arr[1]=200;
arr[2]=300;
//arr[3]=400;//没有报编译错误 数组下标越界异常ArrayIndexOutofBoundsException
System.out.println(arr[arr.length-1]);//输出数组最后一个值
ArrayIndexOutOfBoundsException:数组下标越界异常
> 数组下标为0到(数组长度-1),若超出这个范围则在运行时会发生数组下标越界异常
4.遍历/迭代:for循环从头到尾输出 数组[循环数]
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){ //遍历arr数组
arr[i] = (int)(Math.random()*100); //给每个元素赋值为0到99的随机数
System.out.println(arr[i]); //输出每个元素的值
}
5.复制的2种方法和扩容
首先要: import java.util.Arrays;
System.arraycopy(a,scrPos:0,b,destPos:0,4) 这种方法灵活性好
System.arraycopy(a,1,b,0,4);
int[] a = {10,20,30,40,50};
int[] b = new int[6]; //0,0,0,0,0,0
//a:源数组
//1:源数组的起始下标
//b:目标数组
//0:目标数组的起始下标
//4:要复制的元素个数
System.arraycopy(a,1,b,0,4); //灵活性好
for(int i=0;i<b.length;i++){
System.out.println(b[i]);
}
int[] b = Arrays.copyOf(a,6);
int[] a = {10,20,30,40,50};
//a:源数组
//b:目标数组
//6:目标数组的长度
// ---若目标数组长度>源数组长度,则末尾补默认值
// ---若目标数组长度<源数组长度,则将末尾的截掉
int[] b = Arrays.copyOf(a,6);
for(int i=0;i<b.length;i++){
System.out.println(b[i]);
}
a = Arrays.copyOf(a,a.length+1);
int[] a = {10,20,30,40,50};
//数组的扩容(创建了一个更大的新的数组,并将数据复制进去)
a = Arrays.copyOf(a,a.length+1);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
综合练习 :找最大值并且扩容数组
//找最大值
//将最大值放在数组最后一个元素的下一个位置 --扩容
import java.util.Arrays;
public class bMaxOfArray {
public static void main(String[] args) {
//随机生成整数型数组arr,包含10个随机数
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 100);
System.out.println("arr[" + i + "]=" + arr[i]);
}
//遍历剩余元素 if剩余元素大于max 修改max为较大的
//假设:int[]={8,35,78,5}
// max=8/35/78
int max = arr[0];
for (int a = 1; a < arr.length; a++) {//遍历剩余元素
if (arr[a] > max) {//如果剩余元素大于max
max = arr[a];//修改max为较大的
}
}
System.out.println("最大值为" + max);
//扩容
arr = Arrays.copyOf(arr, arr.length + 1);
arr[arr.length - 1] = max;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
//找最小值 随机生成数组 找最小值 扩容
int[] arr1 = new int[10];
for (int i = 0; i < arr1.length; i++) {
arr1[i] = (int) (Math.random() * 100);
System.out.println("arr[" + i + "]=" + arr[i]);
}
int min = arr1[0];
for (int i = 0; i < arr1.length; i++) {
if (min < arr[i]) {
min = arr[i];
}
}
System.out.println("最小值为" + min);
//扩容
Arrays.sort(arr1);
}
}
6.排序 Arrays.sort()
- Arrays.sort(arr); //升序
排序是对数组所施加的比较常见的算法
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*100);
System.out.println(arr[i]);
}
Arrays.sort(arr); //升序
System.out.println("排序后:");
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
System.out.println("倒着输出:");
for(int i=arr.length-1;i>=0;i--){ //数据并没有改变,只是倒着展示而已
System.out.println(arr[i]);
}