基础篇3.0数组

  数组是最为常见的一种数据结构,是相同类型的、用一个标识符封装到一起的基本类型数据序列或对象序列。可以用一个统一的数组名和下标来唯一确定数组中的元素。实质上数组是一个简单的先行序列,因此数组访问起来很快。

数组概念

  (概念)数组是具有相同数据类型的一组数据的集合。当需要使用的变量很多,而且数据类型相同时,逐个声明非常麻烦,这时可以声明一个数组,然后对数组进行操作。Java语言中虽然基本数据类型不是对象,但是由于基本数据类型组成的数组则是对象,在程序设计中引入数组可以有效地管理和处理数据。

  (数组)通过图示,通俗地讲一维数组的每个基本单元都是基本数据类型的数据;二维数组就是每个基本单元是一维数组的一维数组;以此类推,n维数组的每个基本单元都是n-1维数组的一维数组。

  

  三维数组的元素都是一个二维数组,再把每个二维数组看成一个整体,则此三维数组也是一个二维数组结构。

  

  一维数组

  一维数组实质上时一组相同类型数据的集合,当需要在程序中处理一组数据或者传递一组数据时,可以应用这种类型的数组。

    创建一维数组

  (应用)数组作为对象允许使用new关键字进行内存分配。在使用数组之前,必须首先定义数组变量所属的类型,即声明数组。声明一维数组有两种类型,语法格式如下:

  数组元素类型 数组名字[];  数组元素类型[] 数组名字;

  数组元素类型:决定了数组的数据类型,它可以是Java中任意的数据类型,包括基本数据类型和非基本数据类型。

  数组名字:为一个合法的标识符。

  符号“[]”:指明该变量时一个数组类型变量,单个“[]”表示要创建的数组是一维数组。

  (使用)声明数组后,还不能访问它的任何元素,因为声明数组仅仅是给出了数组名字和元素的数据类型,要想真正使用数组还要为其分配内存空间,且分配内存空间时必须指明数组的长度。分配内存空间的语法格式如下:

  数组名字=new 数组元素类型[数组元素个数];

  数组名字:已经声明的数组变量的名称。

  new:对数组分配空间的关键字。

  数组元素的个数:指定数组中变量的个数。即数组的长度。

  (举例)arr = new int[5];代码表示为已经创建好的数组arr分配长度为5的内存空间,即该数组可以有5个元素。应该注意的是,在内存空间中数组的下标是从0开始的。arr的内存存储状态如图:

  

  注意:使用new关键字为数组分配内存时,数组中各个元素的初始化值都为0.

  创建数组和分配内存不一定要分开执行,可以在创建数组时直接为变量赋值。语法格式:

  数组元素类型 数组名[]=new 数组元素类型[数组元素的个数];(举例)int month[]=new int[12];代码创建了一个一维数组,并指定了数组长度是12.这种创建数组的方法也是Java程序编写过程中普遍的做法。

  注意:无论用何种法法声明数组,前面的中括号中都不可以填写内容,否则将会在编译时出现错误。

    初始化一维数组

  (概念)数组可以与基本数组一样进行初始化操作,数组的初始化可分别初始化数组中每个元素。数组的初始化有两种形式。

   int arr[]=new int[]{1,2,3,4,5};    int arr2[] = {1,2,3,4,5};

  数组的初始化方式是:把数据类型包括在大括号之内,中间用逗号分开数组元素的值,系统自动为数组分配一定的空间。第一种初始化方式,创建5个元素的数组。第二种初始化方式,创建5个元素的数组。

  注意:初始化数组时可以省略new运算符和数组的长度,编译器将根据初始值的数量来自动计算数组长度,并创建数组。

  (应用)一维数组每个元素都有自己的值,使用for循环根据数组的下标,将数组的每个元素的值相加。

  多维数组

  (概念)二维和多于二维的数组被统称为多维数组,其中二维数组在程序中经常会使用,三维数组偶尔也会使用。

    二维数组

  (概念)如果一维数组中的各个元素仍然是一维数组,那么它就是一个二维数组。二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表元素所在的列。

  1)二维数组的创建

  声明二维数组的方法,语法格式:

  数组元素类型 数组名字[][];

  数组元素类型 [][]数组名字;

  数组元素类型:决定了数组的数据类型,它可以是Java中任意的数据类型,包括基本数据类型和非基本数据类型。

  数组名字:为一个合法的标识符。

  符号“[]”:指明该变量时一个数组类型变量,两个“[]”表示要创建的数组是二维数组。

  (举例)int myarr[][];与一维数组一样,如果二维数组在声明时没有分配内存空间,同样也要使用关键字new来分配内存,然后才可以访问每个元素。

  二维数组可以看成是由多个一维数组所组成,在给二维数组分配内存时,可以为这些一维数组同时分配内存。第一个中括号的数字是一位数组的个数,第二个中括号中的数字是这些一维数组的长度。

  (举例)为二维数组每一维分配相同内存。

  a = new int[2][4];为二维数组分配内存,分配后二维数组a拥有两个长度是4的一维数组。分配内存如图:

  

  给二维数组分配内存时,还可以对其每一个一维数组单独分配内存,且分配的内存可以并不相同,在第一个中括号中定义一维数组的个数,然后利用一维数组分配内存的方法分配内存。

  分别为每一位单独分配内存。a = new int[2][];a[0]= new int[2];a[1]=new int[3];

  为二维数组分配内存,先给二维数组分配两个一维数组,然后对第一个一维数组分配内存2;第二个一维数组分配内存3.

  

  2)二维数组初始化

  (概念)二维数组的初始化与一维数组初始化类似,同样可以使用大括号完成二维数组的初始化。语法格式:

  type arrayname[][]={value1,value2……valuen};

  type:数组数据类型。arrayname:数组名称,一个合法的标识符。value:数组中各元素的值

  int myarr[][]={{12,0},{45,10}};

  初始化二维数组后,要明确数组的下标都是从0开始。如上面的代码中myarr[1][1]的值为10。int型二维数组是以int a[][]来定义的,所以可以直接给a[x][y]赋值。如给a[1]的第二个元素赋值:a[1][1]=20;

  注意:对于整型二维数组,创建成功之后系统会赋给数组中每个元素初始化值0.

  三维数组

  三维数组的声明与一、二维数组类似,一位使用一个中括号、二维使用两个中括号,以此类推,三维则使用3个中括号;初始化三维数组时,由3层大括号进行初始化;使用时也更麻烦一些,需要使用3层for循环。

  注意:三维数组的元素是二维数组,二维数组的元素是一维数组,每个元素使用arr[x][y][z]的格式表示。

  数组的基本操作

  java.util包的arrays类包含用来操作数组(如排序和搜索)的各种用法。

  1)遍历数组

  遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现。

  遍历一维数组

  public class getDay{

    public static void main(string[] args){

    int day[] = new int[]{31,28,31,30,31,30,31,30,31,30,31};

    for(int i = 0 ;i<12;i++){

    system.out.print((i+1)+"月有"+day[i]+'天'+'\t');

    if((i+1)%3==0){

    system。out.println("\n");

    }

    }

    }

  }

  在遍历数组时,使用foreach语句更简单,该语句并不是一个新的用语法,而是for循环的简化格式。

  2)填充替换数组元素

  数组中的元素定义完成后,可通过arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成任意类型的数组元素的替换。fill()方法有两种参数类型。

  fill(int[]a,int value)方法

  该方法可将指定的int值分配给int型数组的每个元素。

  a:要进行元素替换的数组。value:要存储数组中所有元素的值。返回值:填充后的数组。

  fill(int[]a,int fromIndex,int toIndex,int value)方法

  该方法将指定的int值分配给int型数组指定范围中的每个元素。填充的范围从索引fromIndex(包括)一直到索引toIndex(不包括)。如果fromindex==toindex,则填充范围为空。

  a:要进行填充的数组。fromindex:要使用指定值填充的第一个元素索引(包括)。

  toindex:要使用指定值填充的最后一个元素的索引(不包括)。value:要存储数组所有元素的值。返回值:替换后元素的数组。

  注意:如果指定的索引位置大于或等于要进行填充的数组的长度,则会报出arrayindexoutofboundsexception(数组樾界异常,关于异常的知识将在后面的章节讲解)异常。

  3)对数组进行排序

  通过arrays类的静态sort()方法可实现对数组排序,sort()方法提供了许多种重载形式,可对任意类型数组进行升序排列。语法格式:Arrays.sort(object)。

  object:指进行排序的数组名称。返回值:排序后的数组。

  注意:Java语言中的string类型数组的排序算法是根据字典编排顺序排序的,因此数字排在字母前面,大写字母排在小写字母前面。

  4)复制数组

  Arrays类的copyOf()方法与copyofRange()方法可实现对数组的复制。copyof()方法是复制数组至指定长度,copyofrange()方法则将指定数组的指定长度复制到一个新数组中。

  copyof()方法

  该方法提供了很多种重载样式,来满足不同类型是数组的复制。语法格式:

  copyof(arr,int newlength)

  arr:要进行复制的数组。newlength:int型常量,指复制后的新数组的长度。如果新数组的长度大于数组arr的长度,则用0填充(根据复制数组的类型来决定填充的值,整型数组用0填充,char型数组则会使用NULL来填充);如果复制后的数组长度小于数组arr的长度,则会从数组arr的第一个元素开始截取至满足新数组长度为止。

  返回值:复制后的数组。

  copyofrange()方法

  copyofrange(arr,int fromindex,int toindex)

  arr:要进行赋值的数组对象。fromindex:指定开始复制数组的索引位置。fromindex必须在0至整个数组的长度之间。新数组包括索引是fromindex的元素。toindex:要赋值范围的最后索引位置。可以大于数组arr的长度。新数组不包括索引是toindex的元素。返回值:复制指定位置后的数组。

  本章小结:主要介绍数组的创建及使用方法。数组的下标是从0开始,最后一个元素的下标总是“数组名.length-1”。本章重点是遍历数组以及使用arrays类中的各种方法对数组进行操作,如填充替换数组、复制数组等。此外arrays类还提供了其他操作数组的方法。

posted on 2017-05-24 11:08  L1nus  阅读(133)  评论(0)    收藏  举报

导航