一.数组的概念
1.数组是一个容器,用来存储一组数据类型相同的数据.
2.声明数组的格式: 数据类型[] 数组名 = 初值; 注意:这里的数据类型指的是数组中保存的数据的类型
3.数组的三种声明格式
int[] array = new int[数组的长度];
int[] array1 = new int[]{1,2,3,4,5,7};
int[] array2={1,3,5,67,8,3};
4.数组是在堆内存当中开辟一块连续的内存空间
栈内存有两个特点:一是当函数运行完之后会自动释放. 二是先进栈的后出去,后进栈的先出去.
如果数组=null ,这时数组指向的是一个空地址 也会出现异常
NullPointerException
5.数组的长度一旦确定好之后就不能在更改, ".length"可以获取数组的长度,数组的存取是
依靠数组的下标进行的,下标从1开始.当输入的下标超出数组的范围是就会爆出数组越界的异常
ArrayIndexOutOfBoundsException
二.数组的遍历
// 需求: 随机10个数 随机的区间为[15,150]
// 1.把这个10个数放入数组中
// 2.打印最大值/最小值
int[] arr = new int [10];
int max = 0;
int min = 150;
for(int i=0;i<10;i++){
int random =(int)(Math.random()*(150-15+1)+15);
arr[i] = random;
}
for(int i=0;i<arr.length;i++){
if(random>max){
max=random;
}
if(random<min){
min=random
}
}
System.out.println("max="+max);
System.out.println("min="+min);
三.反转数组的值
//反转数组的顺序
int arr[]={1,5,6,8,10,12};
int sun = (int)arr.length/2; //得到需要交换的次数
for(int 0;i<sun;i++){
int temp = arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-i-1]=temp;
}
四.数组的排序
1.冒泡排序 数组的中的每一项不停的和下一项进行对比
for(int i=0;i<arr.length-1;i++){ //外层循环控制要比对了多少趟
//内循环-1,防止数组越界
//内循环-1,每循环一次的时候都会确定一个数满足了要求,所以-1
for(int j =0;j<arr.length-1-i;j++){ //内层循环控制一趟要比对多少次
if(arr[j>arr[j+1]){
int c= arr[j];
arr[j]=arr[j+1];
arr[j+1]=c;
}
}
}
2.选择排序 //选择一个数和其他的数进行比较
int[] arr={1,5,8,4,2};
for(int i;i<arr.length-1;i++){
for(int j=1+i;j<arr.length;j++){
if(arr[i]>arr[j]){
int c= arr[i];
arr[i]=arr[j];
arr[j]=c;
}
}
}
五.数组的折半查找
public static void main(String[] args) {
int arr[] = { 1, 22, 33, 44, 55, 66 };
int key = 66;
int minIndex = 0;
int maxIndex = arr.length - 1;
int midIndex = (int) (minIndex + maxIndex) / 2;
while (arr[midIndex] != key) {
if (arr[midIndex] > key) {
maxIndex = midIndex - 1;
midIndex = (int) (minIndex + maxIndex) / 2;
} else {
minIndex = midIndex + 1;
midIndex = (int) (minIndex + maxIndex) / 2;
}
if (minIndex > maxIndex) {
midIndex = -1;
break;
}
}
System.out.println("该值得下标是" + midIndex);
}