黑马程序员——数组的定义与常用的相关方法

来源:互联网 发布:变形金刚5豆瓣知乎 编辑:程序博客网 时间:2024/05/30 05:29

数组是一种数据结构,用来存储同一类型值的集合.通过一个整型下标可以访问数组中的每一个值,数组中的值是有序的,可重复。

一、数组的定义

在我们定义数组时,如果程序当前并没有使用到数组而是到程序的后半段才开始使用,那么我建议是将数组的声明和初始化分开,等到使用数组时才对其进行初始化赋值,这样的好处是在程序的前半段使数组不白白的占用内存空间。

数组的声明:

数组有两种声明方式type[] a;或 int a[];但是大多数的人喜欢使用第一种声明方式,因为它将类型type[]和变量名区分开了。

数组的初始化:

数组的初始化也可以分为两种形式

1、  确定数组元素的初始化

如果我们确定数组中的元素我们可以在初始化时一步到位例如:

int[]  a=new      int[]{12343}

其还有一种简写的格式为

         int[]  a={12343}

甚至我们还可以以此来创建一个匿名的数组

         new int[]{12343}//数组只使用一次情况下或在方法间进行传值时使用

这些数组的大小为就是初始化值的个数。

2、  不确定数组元素的初始化

如果我们不确定数组中的元素,我们可以先对数组进行初始化,之后在需要时对数组进行赋值

int[] a=new int[12]

注意:我们在java中允许我们定义一个长度为0的数组定义方式如下:

int[]  a=new int[0]

int[] a={}

我们编写一个返回值为数组类型的方法时,如果碰巧结果为空,则可以用这种数组。

 

二、数组的相关操作

数组中封装了其从Object继承下来的相关方法,和用来确定数组长度属性值length,但是这些方法根本不能满足我们的需求,我们可以自己编写相关方法来实现我们的要求,但是太过麻烦,这时我们就要用到有关数组的工具类java.util.Arrays,在Arrays中我们常用到的方法为:

1Static  String toString(type[] a)

将数组传入此方法可以将,数组中的元素以字符串形式返回,这些元素被放在括号内,并用逗号隔开,返回形式如下:

[元素1,元素2,元素3,…….]

传入的数组只能为intlongshortcharbytebooleanfloatdouble类型。

 

2Static  type  copyOf(type[] a,int length)

这个方法的作用是将数组a复制到一个新的数组,如果length大于a的长度,新的数组多余的部分补0或用false填充,如果length小于a的长度,则截取数组a进行复制这个方法我们常常用来扩从数组个数。此外在java.lang.system中还有一个此方法的加强版为:

Static void arrayCopy(object from,int fromIndex ,Object to,int toIndex,int count)

此方法的作用是将 from数组中from[fromIndex]-----from[fromIndex+count-1]之间的元素复制到新的数组to中去,并在数组to中从角标toIndex开始存储。

 

3Static  void  sort(type[]  a)

Static  void  sort(type[]  a, int formIndex, int toIndex)

    这两个方法都是对传入的数组进行排序,不过一个是整体排序,一个是局部排序,它们所采用的排序方式为一个经过优化的快速排序算法。

       

4Static  int  binarySearch(type[]  a,pyte  v)

Static  int  binarySearch(type[]  a,int  start,int  end,pyte  v)

这两个方法都是查找数组中是否存在某个元素,不过一个是全局查找,一个是局部查找,它们所采用的查找方式都为二分搜索算法,它们在方法内部都会调用以下方法来实现查找:

private static int binarySearch0(long[] a, int fromIndex, int toIndex,

                                     long key) {

        int low = fromIndex;

        int high = toIndex - 1;

 

        while (low <= high) {

            int mid = (low + high) >>> 1;//采用无符号移位运算符来实现除2运算。

            long midVal = a[mid];

 

            if (midVal < key)

                low = mid + 1;

            else if (midVal > key)

                high = mid - 1;

            else

                return mid; // 数组内找到相应值,返回其下标

        }

        return -(low + 1);  // 数组内没有找到相应值,返回(-(插入点) - 1)   

}

由这段代码我们可以看出我们在调用这个查找方法之前要对数组进行排序(通过sort(type[]  a)方法);此方法的其他的其他特性已经在代码内标注

 

Static  boolean  equals(type[]  a,type[]  b)

         这个方法重写了equals方法,它的内部代码实现方式为和其特点如下:

public static boolean equals(type[] a, type[] a2) {

        if (a==a2)     //如果aa2指向为同一个数组则返回值为true

            return true;

        if (a==null || a2==null)  //如果aa2 有一个为null(即有尚未初始化)则返回false,由此可知如果两个尚未初始化的数组来比交结果为false

            return false;

 

        int length = a.length; 

        if (a2.length != length)  //如果aa2为两个数组,则先比较其长度,长度不同则必定为两个数组,返回false

            return false;

 

        for (int i=0; i如果这两个数组前面都符合,则比较其内容来确定数组是否相同

            if (a[i] != a2[i])

                return false;

 

        return true;

}

 

以上为Arrays针对数组常用的一些方法,还有一些方法不是特别常用如果需要请查阅javaapi帮助文档。

 

 

使用数组时我们必定要注意的是角标越界错误 IndexOutOfBoundsException

原创粉丝点击