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]
相關文章
相關標籤/搜索