一、什么是数组以及数组常见操作
数组:同一类型数据的集合。就是一个存储数据的容器。特点: 可以对数组中的每一个元素进行编号,从0开始;这样方便对数组中的元素进行操作。通过数组的length属性可以获取到数组的长度。注意:定义数组时,必须指定长度。什么时候使用数组呢?当参与运算的数据较多时,必须想到先将数据进行临时存储。
对数组容器的常见操作:
1、对数组进行遍历2、获取最的最大或最小值
public static int getMax(int[] arr){int max = 0;for(int x=1; x<arr.length; x++){if(arr[x]>arr[max])max = x;}return arr[max];}
3、数组排序
/*指定一个位置用该位置上的元素和数组元素进行比较。在内循环结束一次,该位置出现最值。*/
public static void sort_1(int[] arr){
for(int x=0; x<arr.length-1; x++){
for(int y=x+1; y<arr.length; y++){
if(arr[x]>arr[y]){}
}
}
}/*
相邻两个元素进行比较。内循环结束一次,后位出现最值。
*/public static void sort_2(int[] arr){
for(int x=0; x<arr.length-1; x++){
for(int y=0; y<arr.length-x-1;y++){
if(arr[y]>arr[y+1]){}
}
}
}
注意事项:y<arr.length-x-1: -x是为了减少参与比较的元素的个数; -1是为了避免脚标越界。
public static void swap(int[] arr,int a,int b){//arr[a] = arr[a]^arr[b];//arr[b] = arr[a]^arr[b];//arr[a] = arr[a]^arr[b];int temp = arr[a];arr[a] = arr[b];arr[b] = temp;/**/}
4、折半查找:前提:必须是有序的数组才有效。
//这个比较经典,值得回顾
public static int binarySearch(int[] arr,int key)
{
int start=0,end=arr.length-1,mid;while(start<=end){
mid = (start+end)>>1;if(key>arr[mid])
start = mid + 1;
else if(key<arr[mid])
end = mid - 1;
elsereturn mid;
}return -1;
}
二、多维数组复制:
多维数组赋值时,先高维后低维,简言之就是从左到右
public class TestMutiArray{
public static void main(String args[]){
int[][] a={{1,2,3},{2,3},{3,4,5,8}};for(int i=0;i<a.length;i++){ //使用双for循环遍历二维数组并输出打印其值
for(int j=0;j<a[i].length;j++){
System.out.println(a[i][j]);
}
}
}
}
三、数组拷贝问题:
public class TestMutiArray{
public static void main(String args[]){
int[][] a={{1,2,3},{2,3},{3,4,5,8}};for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
//System.out.println(a[i][j]);
}
}
//arrayCopy();
arrayCopy1();
}public static void arrayCopy(){
int arr[]={1,2,3,4,5};int arr1[]=new int[8];System.arraycopy(arr,0,arr1,0,arr.length);for(int i=0;i<arr1.length;i++){
System.out.println(arr1[i]);
}
}public static void arrayCopy1(){
int[][] a={{1,2},{3,4},{5,6,7}};int[][] a1=new int[3][];System.arraycopy(a,0,a1,0,a.length);a1[2][1]=100 ; ——————①System.out.println("被拷贝的数组:"+a[2][1]);System.out.println("拷贝的数组:"+a1[2][1]);
}
}
①这里需要注意的是,这里拷贝的时候,由于拷贝的是数组的引用,所以在更改拷贝的值之后,其实也将原来数组引用的所指向的值改变了, 具体参照下图:
四、 数组中的涉及的其他问题:
1、数组脚标越界异常。2、空指针异常。二维数组:可以理解为数组中的数组。
格式1:int[][] arr = new int[3][];System.out.println(arr[0]);//null。是二维数组中第一个一维数组。该数组默认初始化值为null。格式2:int[][] arr = new int[3][2];System.out.println(arr[0]);//是数组的哈希值。因为二维数组中的小数组被重新初始化为一个数组实体。格式3:int[][] arr = {{3,4},{8,1,9}};
System.out.println(arr.length);//打印二维数组的长度。System.out.println(arr[1].length);//打印二维数组中第二个小数组的长度。二维数组元素求和:其实就是大圈套小圈(使用双for循环可完成)int sum = 0;for(int x=0; x<arr.length; x++){for(int y=0; y<arr[x].length; y++){sum = sum + arr[x][y];}}什么时候使用二维数组呢?有很多数据。这些数据又有分组。这时可以使用二维数组。例如:学生的成绩学生甲:80,88,90,86学生乙:90,90,70,80int[][] arr = {{80,88,90,86},{90,90,70,80}};arr就代表总成绩。