数组的介绍
数组是在内存中存储相同数据类型的连续的空间,声明一个数组就是在内存空间中划出一串连续的空间。
数组名代表的是连续空间的首地址。
通过首地址可以依次访问数组所有元素。
元素在数组中的排序下标从零开始。
数组的特性:
数组长度一旦声明,不可改变不可追加。
数组可以存储基本数据类型也可以存储引用数据类型(对象)。
如图:
基本数据类型数组默认初始化都是0
int arr [] =new int[5];
for(int i : arr){
System.out.print(i); // 输出:00000
}
引用数据类型数组默认初始化为null
Object arr [] =new Object[5];
for(Object i : arr){
System.out.print(i);// 输出:nullnullnullnullnull
}
数组的使用
声明一个数组:
1.类型 [] 变量名
2.类型 变量名 []
例如:
int [] arr //建议这种
int arr []
给数组分配内存空间:
arr = new int[5];
给数组赋值:
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
给数组赋值也可以隔着位置赋值:
arr[1] = 2;
arr[3] = 4;
for(int a : arr){
system.out.print(a); //没赋值的默认为0
}
//用循环给数组赋值
for(int i=0; i<arr.length; i++){
arr[i] = i+1;
}
声明一个数组并给数组赋值:
int []arr = new int[]{1,2,3,4,5};
int []arr ={1,2,3,4,5}; //简写
数组的应用:
查找算法:
查找数组中一个数,返回这个数所在数组中的位置。
最笨的方法:(暴力法)
思想:遍历数组,每个值都和目标值进行比对,相等则返回下标。
public int search(int arr[],int target){
for(int i=0;i<arr.length;i++){
if(target == arr[i]){
return i;
}
}
return -1;
}
二分查找算法:(前提数组是有序的)
思想:定义两个指针,每次截取一半,如果大于目标值,就把前指针移动到截取的位置+1;否则移动后指针,知道满足目标值等于两指针和的一半对应的值则返回。
后边会介绍8中排序算法
public int binarry(int [] arr,int target){
Arrays.sort(arr); //java中内置函数,排序
//定义一个起始位置
int start =0;
int end =arr.length-1; //数组下标
while(true){
int index = (start+end)/2;
if(target == arr[index]){
return index; //返回数组下标
}
else if(target > arr[index]){
start=index+1; //取索引右边一位
}else{
end = index-1; //取索引左边一位
}
}
}