4.1 数组的概述
数组是具有相同数据类型的一组数据的集合。例如,球类的集合——足球、篮球、羽毛球等;电器集合——电视机、洗衣机、电风扇等。在程序设计中,可以将这些集合称为数组。数组中的每个元素具有相同的数据类型。在Java中同样将数组看作是一个对象,虽然基本数据类型不是对象,但是由基本数据类型组成的数组则是对象。在程序设计中引入数组可以更有效地管理和处理数据。我们经常使用的数组包括一维数组和二维数组等。
4.2 一维数组
4.2.1 创建一维数组
4.2.2 初始化一维数组
4.2.3 获取数组长度
例4.1
package d4;
public class li1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
char a [] = {'A','B','C','D'};
System.out.println("数组a的长度为" + a.length);
char b [] = a;
System.out.println("数组b的长度为" +b.length);
}
}
4.2.4 使用一维数组
例4.2
package d4;
public class li2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int day[] = new int[] {31,28,31,30,31,30,31,31,30,31,30,31};
//for (int i = 0; i < 12; i++) {利用循环将信息输出
for (int i = 0; i < day.length; i++) {
System.out.println((i+1) +"月有" + day[i] + "天");//输出的信息
}
}
}
4.3 二维数组
比如快捷酒店,每一个楼层都有很多房间,这些房间都可以构成一维数组,如果这个酒店有500个房间,并且所有房间都在同一个楼层里,那么拿到499号房钥匙的旅客可能就不高兴了,从1号 扫一扫,看视频房走到499号房要花好长时间,因此每个酒店都不只有一个楼层,而是很多楼层,每一个楼层都会有很多房间,形成一个立体的结构,把大量的房间均摊了下来,这种结构就是二维表结构。
4.3.1 创建二维数组
4.3.2 初始化二维数组
例4.3
package d4;
public class li3 {
public static void main(String[] args) {
/*第一种方式*/
int tdarr1[][] = { { 1, 3, 5 }, {5, 9, 10 } };//创建并初始化二维数组
/*第二种方式*/
int tdarr2[][] = new int[][] { { 65, 55, 12 }, {92, 7, 22 } };//创建并初始化二维数组
/*第三种方式*/
int tdarr3[][] = new int[2][3];//先给数组分配内存空间
tdarr3[0] = new int[] { 6, 54, 71 };//创建一维数组
tdarr3[1][0] = 63;//给第二行第一列赋值为63
tdarr3[1][1] = 10;//给第二行第二列赋值为10
tdarr3[1][2] = 7;//给第二行第三列赋值为7
}
}
4.3.3 使用二维数组
例4.4
package d4;
public class li4 {
public static void main(String[] args) {
char arr[][] = new char[4][];
arr[0] = new char[] {'春','眠','不','觉','晓'};//为每一行赋值
arr[1] = new char[] {'处','处','闻','啼','鸟'};//为每一行赋值
arr[2] = new char[] {'夜','来','风','语','声'};//为每一行赋值
arr[3] = new char[] {'花','落','知','多','少'};//为每一行赋值
/*横版输出*/
System.out.println("-----横版-----");
for (int i = 0; i < 4; i++) {//循环4行
for (int j = 0; j < 5; j++) {//循环5列
System.out.print(arr[i][j]);//输出数组中的元素
}
if (i % 2 == 0) {
System.out.println(",");//如果是一,三句,输出逗号
}else {
System.out.println("。");//如果是二,四句,输出句号
}
}
/*竖版输出*/
System.out.println("-----竖版输出-----");
for (int j = 0; j < 5; j++) {//列变行
for (int i = 3; i >= 0; i--) {//行变列
System.out.print(arr[i][j]);//输出数组中的元素
}
System.out.println();//换行
}
System.out.println("。,。,");//输出最后的标点
}
}
例4.5
package d4;
public class li5 {
public static void main(String[] args) {//主函数
int a[][]= new int[3][];//创建二维数,指定行数,不指定列数
a[0] = new int[] {52, 64,85,12,3,64};// 第一行分配6个元素
a[1] = new int[] { 41,99,2};//第二行分配3个元素
a[2] = new int[] { 285, 61,278,2 };// 第三行分配4个元素
for (int i =0; i<a.length; i++) {//数组长度判断条件
System.out.print("a[" +i+"]中有"+a[1].length+"个元素,分别是:"); //输出元素语段
for (int tmp : a[i]) { // foreach 循环输出数组中元素
System.out.print(tmp + " ");//输出元素个数
}
System.out.println();//输出元素
}
}
}
4.4 数组的基本操作
遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现的。遍历一维数扫一扫,看组很简单,也很好理解,下面详细介绍遍历二维数组的方法。
遍历二维数组需使用双层for循环,通过数组的 length属性可获得数组的长度。
例4.6
package d4;
public class li6 {
public static void main(String[] args) {//主函数
int b[][] = new int[][] { { 1 },{ 2,3 },{ 4,5,6 } }; // 定义二维数组
for (int k= 0; k<b.length; k++) {//确定数组长度
for (int c = 0; c<b[k].length; c++) { // 循环遍历二维数组中的每个元素
System.out.print(b[k][c]);//将数组中的元素输出
}
System.out.println();// 输出换行
}
}
}
4.4.2 填充和批量替换数组元素
数组中的元素定义完成后,可通过Armays类的静态方法1)来对数组中的元素进行分配,可以填充和替换的效果。0方法有两种参数类型,下面以int型数组为例介绍fll)方法的使用。
例4.7
package d4;
import java.util.Arrays;
public class li7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] = new int[5];
Arrays.fill(arr, 8);
for (int i = 0; i < arr.length; i++) {
System.out.println("第"+i +"个元素是"+arr[i]);
}
}
}
例4.8
package d4;
import java.util.Arrays;
public class li8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] = new int[] {45,12,2,77,31,91,10};
Arrays.fill(arr, 1, 4, 8);
for (int i = 0; i < arr.length; i++) {
System.out.println("第"+i +"个元素是"+arr[i]);
}
}
}
4.4.3 复制数组
例4.9
package d4;
import java.util.Arrays; //导入java.util.Arrays类
public class li9 {
public static void main(String[] args) { //主方法
int arr[] = new int[] {23,42,12}; //定义数组
int newarr[] =Arrays.copyOf(arr, 5); //复制数组arr
for (int i = 0; i < newarr.length; i++) {//循环变量复制后的新数组
System.out.println("第"+i +"个元素是"+newarr[i]);//将新数组输出
}
}
}
例4.10
package d4;
import java.util.Arrays;
public class li10 {
public static void main(String[] args) {//主函数
int arr[] = new int[] { 23, 42 , 12, 84, 10 }; // 定义数组
int newarr[] = Arrays.copyOfRange(arr, 0, 3);//复制数组arr
for (int i = 0; i<newarr.length; i++) { // 循环变量复制后的新数组
System.out.println(newarr[i]);//将新数组中的元素输出
}
}
}
4.5 数组的排序
4.5.1 算法:冒泡排序
冒泡排序是最常用的数组排序算法之一,它以简洁的思想与实现方法备受青睐,是切学者题先扫接能的一个排序算法。使用冒泡排序时,排序数组元素的过程总是小数往前放,大数往后放,类似水中气泡往上升的动作,所以称作冒泡排序。
例4.11
package d4;
public class li11 {
public static void main(String[] args) {
int[] array= {63,4,24,1,3,15};//创建一个数组
li11 sorter= new li11();//创建冒泡排序类的对象
sorter.sort(array);//调用排序方法将数组排序
}
private void showArray(int[] array) {
System.out.println("冒泡排序的结果;");
for(int i: array) {//遍历数组
System.out.print(i+" ");//输出每个元素的值
}
System.out.println();
}
public void sort(int[] array) {
for (int i=1;i<array.length; i++){
for(int j=0;j<array.length -1;j++) {//比较相邻两个元素,较大的数往后冒泡
if(array[j]>array[j+1]) {//如果前一个元素比后一个元素大,则两元素互换
int temp=array[j];//把第一个元素值保存到临时变量中
array[j]=array[j+1];//把第二个元素值保存到第一个元素单元中
array[j+1]=temp;//把临时变量(也就是第一个元素原值)保存到第二个元素中
}
}
}
showArray(array);}}//输出冒泡排序后的数组元素
例4.12
package d4;
public class li12 {
public static void main(String[] args) {
int[] array= {63,4,24,1,3,15};//创建一个数组
li12 sorter=new li12();//创建直接排序类的对象
sorter.sort(array);//调用排序对象的方法将数组排序
}/*
*直接选择排序法
* array
* 要排序的数组
*/
public void sort(int[] array) {
int index;
for(int i=1;i<array.length;i++) {
index=0;
for(int j=1;j<=array.length-i;j++) {
if(array[j]>array[index]) {
index=j;
}
}//交换在位置array.length-i和index(最大值)上的两个数
int temp=array[array.length-i];//把第一个元素值保存到临时变量中
array[array.length-i]=array[index];//把第二个元素值保存到第一个元素单元中
array[index]=temp;//把临时变量也就是第一个元素原值保存到第二个元素中
}
showArray(array);//输出直接选择排序后的数组值
}/*
*显示数组中的所有元素
* 显示的数组
*
*/
private void showArray(int[] array) {
System.out.println("选择排序结果为:");
for(int i:array) {//遍历数组
System.out.print(i+" ");//输出每个数组元素值
}
System.out.println();
}}
例4.13
package d4;
import java.util.Arrays;
public class li13 {
public static void main(String[] args) {
int arr[] = new int[] { 23, 42, 12, 8 }; // 声明数组
Arrays.sort(arr); //将数组进行排序
System.out.println("排序后的结果为");//输出排序后的结果
for (int i =0; i < arr.length; i++){ //循环遍历排序后的数组
System.out.print(arr[i]+" "); //将排序后数组中的各个元素输出
}
}
}