你真的懂Java數組嗎?

一、數組是什麼

  數組是一個固定長度的容器,能夠存放同一類型的數據。咱們能夠經過數組的索引來操做數組,如:獲取數組數據、修改數據、刪除數據等等。數組是一種數據類型,準確來講,數組是一種引用類型,如int是一種基本類型,而定義數組的int[] 類型是一種引用類型。java

二、數組的定義與初始化

2.一、數組的定義

  數組的定義方式很簡單,格式是type[] array,如int[] arr1,意思是定義一個數組名爲arr1的整型數組。由於數組是一種引用類型,因此定義一個數組僅僅是定義一個引用變量(也就是一個指針,儘管Java去掉了指針的概念),若是該數組進行了初始化,那麼該引用變量將指向堆內存的某一塊區域。數組

2.二、數組的靜態初始化

初始化時由咱們顯式地指定數組元素的值,由系統決定數組長度。ide

/**
 * @author RuiMing Lin
 * @date 2020-03-18 13:35
 */
public class Demo1 {
    public static void main(String[] args) {
        // 1.定義一個名字爲colors的數組
        String[] colors;
        // 2.對數組進行顯式初始化
        colors = new String[]{"yellow", "red" , "green" , "orange"};
        // 3.輸出數組的長度
        System.out.println(color.length);
    }
}

或者能夠簡化的初始化方式:工具

// 簡化的靜態初始化方式
    String[] colors_1 = new String[]{"yellow", "red" , "green" , "orange"};
    String[] colors_2 = {"yellow", "red" , "green" , "orange"};

2.三、動態初始化

咱們只指定數組的長度,由系統爲每一個數組元素指定初始值:ui

// 定義一個長度爲10的字符串數組
String[] colors = new String[10];

三、數組的操做

3.一、數組的索引和長度

  在咱們對數組進行初始化後,計算機會根據數組的長度和存儲的數據類型在磁盤開闢一段連續的空間。每個數據按順序會有一個屬於本身的編號,從0開始,到數組長度減一,這個編號就是數組的索引。指針

數組有一個內置的屬性:length,它能夠用來獲取數組的長度。code

/**
 * @author RuiMing Lin
 * @date 2020-03-18 13:35
 */
public class Demo1 {
    public static void main(String[] args) {
        // 定義一個數組
        int[] num = new int[]{0,1,2,3,4,5,6,7,8,9};
        // 根據索引獲取數據
        System.out.println(num[2]);
        // 根據索引修改數據
        num[2] = 10;
        System.out.println(num[2]);
        // 輸出數組的長度
        System.out.println(num.length);
    }
}

3.二、數組的遍歷

數組的遍歷有多種形式,這裏介紹兩種經常使用的方式:blog

若是咱們是使用IDEA寫代碼,咱們能夠使用快捷鍵進行數組操做!排序

/**
 * @author RuiMing Lin
 * @date 2020-03-18 13:35
 */
public class Demo1 {
    public static void main(String[] args) {
        // 定義一個數組
        int[] num = new int[]{0,1,2,3,4,5,6,7,8,9};
        // 遍歷方式一:IDEA快捷鍵:num.fori
        for (int i = 0; i < num.length; i++) {
            System.out.println(num[i]);
        }

        // 遍歷方式二:IDEA快捷鍵:num.for
        for (int i : num) {
            System.out.println(i);
        }
    }
}

3.三、獲取數組最大值

/**
 * @author RuiMing Lin
 * @date 2020-03-18 13:35
 */
public class Demo1 {
    public static void main(String[] args) {
        // 定義一個數組
        int[] num = new int[]{0,10,2,30,4,56,6,17,8,29};
        int max = num[0]; 

        //遍歷數組,取出每一個元素 
        for (int i = 0; i < num.length; i++) { 
            if (num[i] > max) { 
                max = num[i]; 
            } 
        }
        System.out.println("數組最大值是: " + max);
    }
}

3.四、反轉數組

/**
 * @author RuiMing Lin
 * @date 2020-03-18 13:35
 */
public class Demo1 {
    public static void main(String[] args) {
        // 定義一個數組
        int[] num = new int[]{0,10,2,30,4,56,6,17,8,29};
        for (int min = 0, max = num.length - 1; min <= max; min++, max--) {
            //利用臨時變量完成數組中的元素交換
            int temp = num[min];
            num[min] = num[max];
            num[max] = temp;
        }
        // 反轉後,遍歷數組
        for (int i = 0; i < num.length; i++) {
            System.out.println(num[i]);
        }
    }
}

四、數組工具類Arrays

java.utils包提供了一個數組操做類,用來簡化數組的操做。經常使用的類有複製數組、比較數組、對數組進行排序、講數組轉化爲字符串等等。索引

import java.util.Arrays;

/**
 * @author RuiMing Lin
 * @date 2020-03-18 13:35
 */
public class Demo1 {
    public static void main(String[] args) {
        // 定義一個數組
        int[] nums = new int[]{0,10,2,30,4,56,6,17,8,29};
        // 對數組進行排序
        Arrays.sort(nums);
        // 將數組轉化爲字符串進行輸出
        System.out.println("nums = " + Arrays.toString(nums));
        // 複製數組
        int[] newNums = Arrays.copyOf(nums, nums.length);
        System.out.println(nums == newNums);// 判斷兩個數組是不是同一個,答案是false
    }
}

五、數組的內存模型

5.一、一維數組

當咱們定義一個數組時(還沒有初始化),系統在內存棧區開闢一個空間存放這個引用變量。當咱們對數組進行初始化後,系統在堆內存開闢一塊空間進行存儲。
你真的懂Java數組嗎?

5.二、二維數組

嚴格來講,Java並無二維數組,只是看起來像二維數組。二維數組的實質,只是如今棧內存定義一個引用變量,指向堆內存的另外一組引用變量,而堆內存的引用變量在指向存儲的數據。

你真的懂Java數組嗎?

5.三、總結

  當咱們定義一個變量時,在咱們未對其賦值或者系統自動對其賦值前,僅僅只是在棧內存定義一個變量名。此時變量名的做用就像是指針同樣,當實現對其賦值時,系統會在堆內存開闢一片空間存放數據,變量就會指向那片數據區域。

相關文章
相關標籤/搜索