06:数组

数组

数组是具备相同数据类型的一组数据的集合,根据维数不一样能够分为一维数组、二维数组和多维数组。Java 语言中提供的数组是用来存储固定大小的同类型元素。java

1、一维数组

一、数组的建立

在使用数组以前,必须首先定义数组变量所属的类型,即声明数组。算法

  • 声明数组有两种形式。语法格式以下:
数组元素类型  数组名[];
或
数据元素类型[]  数组名;

须要注意的声明时是[]中不能添加任何数据。两种声明方式都正确,不一样数据要声明不一样类型的数组;具体以下:数组

int arr[];                // 声明int型数组,数组中每一个元素都是int型数值
或
String[] str;           // 声明String数组,数组中每一个元素都是String数组
  • 声明数组后还不能访问它的任何元素,要想真正使用数组还要为其分配内存空间,且分配内存空间时必须指明数组的长度。
  • 数组做为对象容许使用new关键字进行内存分配。语法格式以下:
数组名 = new 数组元素类型[数组元素个数];

实例以下:ide

arr = new int[5];    //为数组分配一个大小为5的内存空间
  • 能够同时声明数组并分配内存,语法格式以下:
数组元素类型 数组名 = new 数组元素类型[数组元素个数];

例如:建立了一个一维数组arr,并指定了数组长度为9。对象

int arr = new int[9];

二、数组的初始化

数组也能够与基本数据类型同样进行初始化操做,能够分别初始化数组中的每一个元素。排序

数组初始化的方式有两种,具体以下:索引

int arr1[] = new int[]{1,2,3,4,5};        // 第一种
或
int arr2[] = {10,11,12,13,14};               // 第二种

数组初始化的方式是:把数据包括在大括号以内,中间用逗号分开数组中的元素的值,系统自动为数组分配必定的空间。内存

练习1:求一组一维数组的和it

public class Demo01 {

    public static void main(String[] args) {

        int arr[] = {1, 2, 3, 4, 5};    // 建立并初始化数组
        int sum = 0;                    // 存储累加和

        for (int i = 0; i < arr.length; i++) {   //arr.length表示数组的长度
            sum += arr[i];
        }
        System.out.println("sum的和为" + sum);
    }
}

运行结果:for循环

sum的和为15

练习2:遍历数组

public class Demo02 {

    public static void main(String[] args) {

        int arr[] = {1, 2, 3, 4, 5};    // 建立并初始化数组
        int sum = 0;                    // 存储累加和

        //普通的for循环
        for (int i = 0; i < arr.length; i++) {   //arr.length表示数组的长度
            System.out.print(arr[i] + " ");
        }
        System.out.println();

        //加强型的for循环
        for (int array : arr){
            System.out.print(array + " ");
        }
    }
}

运行结果:

1 2 3 4 5 
1 2 3 4 5 

2、多维数组

一、二维数组

若是一维数组中的各个元素还是一维数组,那么它就是一个二维数组。二维数组经常使用于表示表,表中的信息以行和列的形式组织,第一个下标表明元素所在的行,第二个下标代码元素所在的列。或用线性代数的知识来讲,二维数组就是一个矩阵,第一个下标表明矩阵的行,第二个下标表明矩阵的列。

二维数组的声明也有两种方式,语法格式以下:

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

与一维数组同样,若是声明时没有分配内存空间,一样也要使用关键字new来分配内存。

  二维数组能够看做由多个一维数组组成,在给二维数组分配内存时,能够为这些一维数组同时分配相同的内存。第一个中括号中的数组是一维数组的个数,第二个中括号中是一维数组的长度。

int arr = new int[2][4];  //声明一个二维数组arr并为其分配内存空间,分配后arr拥有两个长度为4的一维数组

二维数组初始化

二维数组的初始化与一维数组相似,一样可使用大括号完成二维数组的初始化。以下:

int arr[][] = {{3,0},{5,7},{6,9}};

练习:遍历二维数组

public class Demo03 {

    public static void main(String[] args) {

        int arr[][] = {{1,2},{3,4,5},{6,7,8,9}};

        for(int i=0; i<arr.length; i++) {
            for(int j=0; j<arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");        // 输出
            }
            System.out.println();         // 换行
        }
    }
}

运行结果:

1 2 
3 4 5 
6 7 8 9 

二、三维数组

对于三维数组,想必各位已经能推算出来了,一维用一个括号,二维用两个括号,那么三维就用三个括号。

int arr[][][] = new int[][][]{
    {{1,2,3},{4,5,6}},
    {{7,8,9},{10,11,12}},
    {{13,14,15},{16,17,18}}
    };

3、Array类

java.util.Arrays 类能方便地操做数组,它提供的全部方法都是静态的。

具备如下功能:

  • 给数组赋值:经过 fill 方法。
  • 对数组排序:经过 sort 方法,按升序。
  • 比较数组:经过 equals 方法比较数组中元素值是否相等。
  • 查找数组元素:经过 binarySearch 方法能对排序好的数组进行二分查找法操做。

具体说明请查看下表:

序号 方法和说明
1 public static int binarySearch(Object[] a, Object key) 用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。若是查找值包含在数组中,则返回搜索键的索引;不然返回 (-(插入点) - 1)。
2 public static boolean equals(long[] a, long[] a2) 若是两个指定的 long 型数组彼此相等,则返回 true。若是两个数组包含相同数量的元素,而且两个数组中的全部相应元素对都是相等的,则认为这两个数组是相等的。换句话说,若是两个数组以相同顺序包含相同的元素,则两个数组是相等的。一样的方法适用于全部的其余基本数据类型(Byte,short,Int等)。
3 public static void fill(int[] a, int val) 将指定的 int 值分配给指定 int 型数组指定范围中的每一个元素。一样的方法适用于全部的其余基本数据类型(Byte,short,Int等)。
4 public static void sort(Object[] a) 对指定对象数组根据其元素的天然顺序进行升序排列。一样的方法适用于全部的其余基本数据类型(Byte,short,Int等)。

4、冒泡排序

代码以下:

import java.util.Arrays;

/**
 * 冒泡排序
 */
public class Demo04 {

    public static void main(String[] args) {
        int[] array = {1,4,6,2,8,5,0};
        //临时变量
        int tmp;
        //外层循环:判断须要循环多少次
        for (int i = 0; i < array.length-1; i++) {
            //内层循环:比较两个数
            for (int j = 0; j < array.length-1-i; j++) {
                if (array[j+1] > array[j]){
                    tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }
}

运行结果:

[8, 6, 5, 4, 2, 1, 0]
相关文章
相关标签/搜索