数组

来源:互联网 发布:什么是usb网络转换器 编辑:程序博客网 时间:2024/06/08 01:15

一.数组的介绍


数组是Java中最常用的数据结构之一,它是一种连续的线性结构。数组相当于一个有固定长度的容器,可以存储相同类型的数据,但是存储数据的个数不能超过数组的长度。

在Java中数组相当于一个类用[]来表示,数组只有唯一的属性length,没有方法。

二.数组的定义和引用

1.一维数组的定义

1)数据类型 [] 数组名=new 数据类型[长度];

2)数据类型 [] 数组名={值1,值2,...};

3)数据类型 [] 数组名=new 数据类型[]{值1,值2,...};

4)前面三种方式的拆分组合

注意:下列定义方式会出错

数据类型 [] 数组名;

数组名={值1,值2,...};

2.一维数组的引用

1)获取一维数组的长度

数组名.length;

2)获取数组中某一个数据

数组名[下标];

值得注意的是数组的长度从1开始计数,而数组的下标是从0开始计数的。如数组名[0]表示的是数组中的第一个数组。

3.二维数组的定义

二维数组与矩阵类似,分行和列。

1.二维数组的定义

二维数组的定义与一维数组大同小异。

1)数据类型 [][] 数组名=new 数据类型[行数][列数];

2)数据类型 [][]数组名={{值1,值2,...},...};

3)数据类型 [][]数组名=new 数据类型[][]{{值1,值2,...},...};

2.二维数组两种定义方式的差别

1)数据类型 [][] 数组名=new 数据类型[行数][列数];

此种定义方式若未给数组中的元素赋值则数组中的数据值为数据类型的默认值。如:

int[][] Array=new int[2][2];

此时数组中的四个数据值都为0。

2)数据类型 [][]数组名={{值1,值2,...},...};或者数据类型 [][]数组名=new 数据类型[][]{{值1,值2,...},...};

这两种定义方式,数组中空缺的位置不会补上默认值。如:

int[][] Array={{2},{1,2}};

此时若输出Array[0][1]运行后会提示数组越界错误

3.二维数组的引用

1)获取二维数组的行数

数组名.length;

2)获取二维数组的列数

数组名[行下标].length;

3)获取二维数组的数据个数

数组名[行下标].length+...;

4)获取二维数组的某一个数据

数组名[i][j];

三.一维数组排序

1.数组排序方法分类

由于篇幅关系,笔者在此只介绍三种排序方法(以从小到大排序为例)

2)冒泡排序

2.1基本思想

相邻两个数比较,若不符合排序要求则交换位置,大的数往下沉小的数往上冒泡

2.2Java实现

public class MaoPaoPaiXu {public static void main(String[] args) {int[] a = { 5, 4, 3, 2, 1 };for (int i = 0; i < a.length; i++) {for (int j = i + 1; j < a.length; j++) {if (a[i] > a[j]) {int temp = a[j];a[j] = a[i];a[i] = temp;}}}for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}

3)选择排序

3.1基本思想

找出数组中最小数的位置,然后与第一个数交换位置。第二个数与第二个数之后的数中最小的数交换位置,以此类推。

3.2Java实现

public class XuanZePaiXu {public static void main(String[] args) {int[] a = { 5, 4, 3, 2, 1 };for (int i = 0; i < a.length; i++) {// 定义变量保存最小值的下标int lower = i;for (int j = i + 1; j < a.length; j++) {// 找出最小值的下标if (a[j] < a[lower]) {lower = j;}}// 交换当前值与最小值int temp = a[lower];a[lower] = a[i];a[i] = temp;}// 输出for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}}

4)插入排序

4.1基本思想

假设前面的数都已排好序,剩下的数按照排序标准以此插入到前面的数中

4.2Java实现

public class ChaoRuPaiXu {public static void main(String[] args) {int[] a = { 5, 4, 3, 2, 1 };for (int i = 1; i < a.length; i++) {for (int j = i; j > 0; j--) {// 插入if (a[j - 1] > a[j]) {int temp = a[j];a[j] = a[j - 1];a[j - 1] = temp;}}}for (int i = 0; i < a.length; i++) {System.out.println(a[i]);}}}

四.二维数组的简单应用

为方便理解二维数组,笔者给出一段简单代码输出二维数组中的最大值及其行数和列数

public class ErWeiMax {public static void main(String[] args) {        int[][] a={{1,2,3,4},{6,8,1,5},{3,6,9,10}};        //定义变量保存最大值和其行数列数        int temp=a[0][0],x=0,y=0;        for(int i=0;i<a.length;i++){        for(int j=0;j<a[i].length;j++){        //若当前数大于temp则将其赋值给temp        if(a[i][j]>temp){        temp=a[i][j];        x=i;        y=j;        }        }                }        //以矩阵形式输出二维数组        for(int i=0;i<a.length;i++){        for(int j=0;j<a[i].length;j++){        System.out.print(a[i][j]+"\t");        }        //换行        System.out.println();        }        //输出最大值和行数列数        System.out.println("max="+temp+"行数="+x+"列数="+y);}}

输出结果: