一、数组概述
数组可以看成是多个相同类型数据组合,对这些数据的统一管理.
数组变量属于引用类型,数组也可以看成对象,数组中的每个元素相当于该对象的成员变量.
数组中的元素可以是任意类型,包括基本类型和引用类型,有默认初始值(按照成员变量的规则).
二、一维数组定义
实例:
int[] a= new int[2]; //对 int[] b= new int[]{1,2,3}; //对 int[] c={1,2,3}; //对 int[] d=new int[2]{1,2}; //错 int[] a=new int[2]; int b=a[2]; //对,有默认值 int b=a[3]; //运行期错误,编译无问题。 int[]a; int k = a[2]; //编译报错,未初始化,只是开辟了栈内存 Person[] p=new Person[5]; p[0].age; //运行期空指针异常
三、数组长度
java中每个数组都有一个public final int 的length属性,表示数组的长度,一旦确定就不能改变大小.
四、二维数组定义
二维数组可以看成数组的数组.
实例
int a[][]={{1,2},{2,4},{2,5}} //对 int a[][]=new a[3][] //二维变长数组 a[0]=new int[10]; a[1]=new int[2]; a[2]={1,2}; //报错,此处和一维数组有区别 int a[][]=new a[][3]; //错
五、数组实例
/*取最值*/ int[] array = new int[]{2,4,5,1,3,9}; int max=0; for(int i=1;i<array.length;i++){ if(array[max]<array[i]){ max=i; } } System.out.println(array[max]); /*选择排序*/ for(int i=0;i<array.length-1;i++){ int min=i; for(int j=i+1;j<array.length;j++){ if(array[min]>array[j]){ min=j; } } if(min != i){ array[i] = array[i]^array[min]; array[min] = array[i]^array[min]; array[i] = array[i]^array[min]; } } /*冒泡排序法*/ for(int i=0;i<array.length-1;i++){ for(int j=0;j<array.length-i-1;j++){ if(array[j]>array[j+1]){ array[j]=array[j]^array[j+1]; array[j+1]=array[j]^array[j+1]; array[j]=array[j]^array[j+1]; } } } /*反转数组*/ public static void reverseArray(int[] arr){ for(int start=0,end=arr.length-1; start<end ; start++,end--){ int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; } } /*二分查找法*/ public static int getArrayIndex(int target){ int num=0; int left=0; int last=array.length-1; int middle = (left+last)>>1; while(array[middle]!=target){ if(array[middle]>target){ last=middle-1; }else{ left=middle+1; } middle=(left+last)>>1; num++; } return middle; }
ps:面试题,插入一个数,保持数组排序,插入的位置?
二分查找条件改为:while(array[left]<=array[last]),插入的位置:left+1
六、实际使用数组时,使用java.util.Arrays类和apache.long.ArrayUtils类中提供的数组方法。
ps(常用的数组方法): http://www.iteye.com/news/28296
时间: 2024-11-06 13:48:27