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

原创 2013年12月05日 20:04:33

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

一、数组的定义

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

数组的声明:

数组有两种声明方式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

相关文章推荐

黑马程序员10——结构和数组相关概念和重点

---------------------- Windows Phone 7手机开发、.Net培训、 期待与您交流!---------------------- 结构 结构...

黑马程序员——数组的相关知识

数组的声明格式里,“数据类型”是声明数组元素的数据类型,常见的类型有整 型、浮点型与字符型等。“数组名”是用来统一这组相同数据类型的元素的名称,其 命名规则和变量的相同,建议读者使用有意义的名称为数组...

黑马程序员——3,JAVA基础(函数,数组相关)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------                        3,JAVA基础(函数,数组相关)   //函数:...

黑马程序员——Java数组相关知识

 -------  java培训、android培训、期待与您交流!--------     数组是多个具有相同数据类型对象的集合,当要操作多个相同类型的元...

黑马程序员——java中数组的定义与应用

------Java培训、Android培训、期待与您交流! ------- 一、相关概念        数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组可以分为一维数组、二维数组和多...

黑马程序员——C语言基础篇---宏定义、数组、字符串和函数

通过一道题来解析宏定义、数组、字符串和函数

黑马程序员——Foundation框架——常用结构体以及NSString相关

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 今天开始复习新的内容,IOS开发中常用的Foundation框架相关内容。...
  • Elors
  • Elors
  • 2015年06月09日 09:10
  • 321

黑马程序员——Java基础 数组排序的两种实现方法,选择和冒泡

作为Java语言的初学者,了解和掌握两个简单的排序方法,会让我们对Java学习有很大的帮助。 首先,可以让我们初学者,接触一些简单的程序算法,对以后学习更多的算法做好贮备。其次数组排序,可以让门熟悉数...

黑马程序员——常用集合特点及其方法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Collection |--List 有序,可重复 |--ArrayList ...
  • DoSamba
  • DoSamba
  • 2015年12月29日 02:04
  • 469

黑马程序员——IDE&Object类、常用API-String类、常用API-Arrays、System、StringBuffer&Integer类和Date类、对象数组

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、IDE&Object类 Eclipse 1:Eclipse的概述 (1)eclipse的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——数组的定义与常用的相关方法
举报原因:
原因补充:

(最多只允许输入30个字)