一、数组
(1)数组元素的使用
一维数组和二维数组都将图通过索引符去访问数组中的元素,例如 boy[0]、boy[2]等,但需要注意(2)length的使用
数组中元素的个数被称为数组的长度,对于一维数组而言,“数组名字.length”的值就是数组中元素的个数;而对于二维数组,这句话的值是它含有的一维数组的个数。例如,对于
float a[] = new float[12];
int b[] new int[3][6];
a.length的值是12,b.length的值是3。
(3)数组的初始化
创建数组后,系统会给每个数组元素一个默认的值,例如int类型是0.
在声明数组的同时也可以给数组元素一个初始值,例如:
float arr[] = {21.3f,23.89f,2.0f,23f,778.98f};
上述过程称作 数组的初始化。相当于创建了一个长度为5的数组,再将每一个内存依次赋值。
当然,我们也可以用若干个一维数组来初始化一个二维数组,这些一维数组的长度可以不一样。
(4)数组的引用
如果我们在最开始的时候创建了两个不一样的数组a和b,系统将会为这两个数组分别分配不同的数组用来存放各自的数据。如果使用了下列赋值语句(需要注意的是,a和b的类型必须是相同的)
a=b;
那么,a所分配的内存和其中的元素将会被释放掉,之后指向b所指的内存位置。
(5)数组的表示格式
一个简单的输出数组元素值的方法,即让Arrays类调用:
public static String toString(int[] a)
该方法可以得到参数指定的一维数组a的如下格式的字符串表示
[a[0],a[1],...a[a.length-1]]
(6)复制数组
在前面的知识点中我们提及到,数组之间可以通过直接引用来改变数组元素的值。但是在内存上并不开辟出一块新的出来,所以为了完成数组的赋值,并且在后续使用新数组时不改变原先数组的值,我们要提出新的方法来进行数组复制。
①arraycopy方法
利用循环把一个数组的元素的值赋给另一个数组中的元素,java提供了一种更简练的方法,即让System类调用方法:
public static void arraycopy(sourceArrray,int index1,copyArray,int index2,int length)
可以将数组sourceArray中的索引值从index1到index+length-1元素中的数据复制到copyArray的某些元素中,copyArray数组从第index2个元素开始存放这些数据,如果数组copy不能存放下复制的数据(即溢出),程序运行将会发生异常。
②copyOf和copyOfRange方法
第一个方法有一个缺点,那就是实现必须创建好数组,现在我们提供新的方法,例如Arrays类调用方法:
public static double[] copyOf(double[] original,int newlength)
public static int[] copyOf(int[] original,int newlength)
public static char[] copyOf(char[] original,int newlength)
public static float[] copyOf(float[] original,int newlength)
该方法可以把参数original指定的数组从索引0开始的newlength个元素复制到一个新数组中,并且返回这个新数组,并且该数组的长度为newlength。如果newlength大于原数组的长度,那么多余的部分将会被系统默认赋值。
另外,还有一个方法可以将数组中的部分元素复制到另一个数组中,例如
public static double[] copyOfRange(double[] original,int form,int to)
public static char[] copyOfRange(char[] original,int form,int to)
public static float[] copyOfRange(float[] original,int form,int to)
public static int[] copyOfRange(int[] original,int form,int to)
可以将original数组中的第from个至第to-1个元素复制到一个新数组中,并且返回这个数组,即新数组的长度将会是to-from。如果to的值大于数组的大于original的长度,那些空余的元素位置仍然会被系统赋默认值。
public static void sort(double a[],int start,int end)
(7)排序与使用二分法查找
介绍一种利用Arrays类调用方法实现对数组的快速排序,调用方法为
public static void sort(double a[])
可以将参数a指定的double类型数组按照升序排序。
public static void sort(double a[],int start,int end)
可以把参数a指定的数组按照索引start到end-1的元素值按照升序排序。
另外介绍一种调用方法时二分法查找,语句是
public static int binarySearch(double[] a,double number)
可以判断number指定的数是否存在于数组a中,其中数组a必须是事先已经排号的数组。如果a中存在与number数值相同的元素,那么该方法将会返回该元素的索引,否则返回一个负数。