Java从入门到项目实战(全程视频版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

6.6 数组案例分析

数组是一种结构化的线性数据类型,也是数据操作的重要组成部分,为了帮助读者更好地理解数组的作用,下面将通过两个常见案例进行说明。

6.6.1 数组排序案例分析

img

数组排序是指将一个无序的数组内容按照其大小关系进行排列,使之可以有序保存,排序操作的基本原理如图6-9所示。

img

图6-9 数组排序原理

范例:实现数组排序

img
img

本程序为了实现数组的排序与内容输出功能定义了ArrayUtil类,并根据图6-9给出的排序原理实现了排序要求。

提问:为什么要定义static方法?定义为普通方法用对象调用不可以吗?

在进行数组操作提供的ArrayUtil类中,为什么不将方法定义为以下形式?

img

回答:减少无用对象产生。

在本程序中ArrayUtil类里面并没有提供任何的成员属性定义,所以即便产生了ArrayUtil类的实例化对象,也没有任何意义(堆内存没有可以保存的成员属性,开辟了一块堆内存,同时又会产生垃圾),所以本程序定义的ArrayUtil类使用了static方法,这样就可以在没有实例化对象的时候调用并执行方法了。

6.6.2 数组转置案例分析

img

数组转置是指实现一个数组内容的首尾信息交换,现在假设有以下一个数组,其内容定义如下。

原始数组内容:1、2、3、4、5、6、7、8、9。

在转换之后数组内容:9、8、7、6、5、4、3、2、1。

对于数组的转置操作实现,可以通过索引控制的方法,利用循环通过数组的首尾依次获取数据,而后交换保存内容的方式来实现,操作流程如图6-10所示。

img

图6-10 数组转置

范例:数组转置

img
img

本程序在一个数组上利用前后两端的索引控制实现数据交换的目的,由于不需要整体数组的循环,所以在开始处根据既定的分析结果通过数组长度计算出循环次数。

提示:关于二维数组的转置问题。

若要实现二维数组的内容交换,实际上只需进行行列内容的转置即可,操作流程如图6-11所示。

img

图6-11 二维数组转置

范例:实现二维数组转置

img
img

需要注意的是,行列数不相等的二维数组无法在一个数组内实现转置控制。如果对其进行转置操作,就需要开辟一个新数组,新数组的行数为旧数组的列数,新数组的列数为旧数组的行数,利用逻辑为新数组赋值后修改原始引用才可实现。但是此类操作的实现意义不大,有兴趣的读者可以自行操作。