数组

一、数组概述

  数组是具有相同数据类型的一组数据的集合。数组中的每一个元素具有相同的数据类型。在Java中同样将数组看做一个对象,虽然基本数据类型不是对象,但由于基本数据类型数组却是对象。在程序设计中引入数组可以更有效地管理和处理数据。可根据数组的维数将数组分为一维数组、二维数组......

二、创建一维数组

1.创建一维数组

(1)先声明,再用new运算符进行内存分配

  声明一维数组有两种方式:

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

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

  

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

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

(2)声明的同时为数组分配内存

  这种创建数组的方法是将数组的声明和内存的分配合在一起执行。语法如下:

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

2.初始化一维数组

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

  ing arr2={23,45,22,4};

三、二维数组的创建及使用

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

1.二维数组的创建

(1)先声明,再用new运算符进行内存分配

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

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

(2)声明的同时为数组分配内存

  第二种方式同第一种实现的功能相同。使用这种方式为二维数组分配内存时,首先指定最左边维数的内存,然后单独地给余下的维数分配内存。通过第二种方式为二维数组分配内存。

2.二维数组初始化

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

  type:数组数据类型。

  array:数组名称,一个合法的标识符。

  value:数组中各元素的值。

四、数组的基本操作

1.遍历数组:就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现。遍历一维数组很简单。遍历二维数组需使用双层for循环,通过数组 length属性可获得数组的长度。

2.填充替换数组元素:数组中的元素定义完后,可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成任意类型的数组元素替换。fill()方法有两种参数类型,下面以int型数组为例介绍fill()方法的使用方法。

(1)fill(int[]a,int value)

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

  fill(int[]a,int value)

  a:要进行元素替换的数组。

  value:要存储数组中所有的元素的值。

(2)fill(int[]a,int fromIndex,int toIndex,int value)

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

  fill(int[]a,int fromlndex,int toIndex,int value)

  a:要进行填充的数组。

  fromIndex:要使用指定值填充的第一个元素的索引(包括)。

  toIndex:要使用指定值填充的最后一个元素 索引(不包括)。

  value:要存储在数组所有元素中的值。

3.对数组进行排序

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

  Arrays.sort(object)

  其中,object是指进行排序的数组名称。

4.复制数组

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

(1)copyOf()方法

  copyOf(arr,int newlength)

  arr:要进行复制的数组

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

(2)copyOfRange()方法

  copyOfRange(arr,int formlndex,int tolndex)

  arr:要进行复制的数组对象。

  formIndex:指定开始复制数组的索引位置。formIndex必须在0至整个数组的长度之间。新数组包括索引是formIndex的元素。

  toIndex:要复制范围的最后索引位置。可大于数组arr的长度。新数组不包括索引是toIndex的元素。

五、数组排序算法

1.冒泡排序

(1)基本思想

  冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。

(2)算法示例

  冒泡算法由双层循环实现,其中外层循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内层循环主要用于对比数组中每个临近元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少。

2.直接选择排序(排序速度比冒泡快)

(1)基本思想

  直接选择排序的基本思想是将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排好的格式。与冒泡排序相比,直接选择排序的交换次数要少很多,所以速度会快些。

(2)算法示例

  每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序地放在已排好序的数列的最后,直到全部待排序的数据元素排完。

3.反转排序

  就是以相反的顺序把原有数组的内容重新排序。反转排序算法在程序开发中也经常用到。

(1)基本思想

  把数组最后一个元素与第一个元素替换,倒数第二个元素与第二元素替换,以此类推,直到把所有数组元素反转替换。

(2)算法示例

  反转排序是对数组两边的元素进行替换,所以只需要循环数组长度的半数次,如数组长度为7,那么for循环只需要循环3次。

 

posted @ 2016-04-02 01:12  冯小漂儿  阅读(385)  评论(0编辑  收藏  举报