Java數(shù)組的定義及使用

數(shù)組的基本概念

所有的開發(fā)中都可能使用到數(shù)組,但并沒有特別復雜,更多的是為了防止筆試中出現(xiàn)的問題

數(shù)組指的是一組相關變量的集合

在Java中數(shù)組屬于引用數(shù)據(jù)類型,牽扯到內存的關系。對于數(shù)組的定義有以下兩種語法形式:

  • 聲明并開辟數(shù)組:數(shù)據(jù)類型 數(shù)組名稱[] = new 數(shù)據(jù)類型[長度];如:int data[] = new int[3];

  • 聲明數(shù)組:數(shù)據(jù)類型 數(shù)組名稱[] = null;如:int data[];
    開辟數(shù)組:數(shù)組名稱 = new 數(shù)據(jù)類型[長度];如:data = new int[3];

當數(shù)組開辟之后,可采用數(shù)組[索引]的形式進行數(shù)組的訪問,但是需要注意的是,任何長度的數(shù)組其范圍一定是從“0”開始的。如果操作中超過了數(shù)組所允許的索引范圍,則程序會出現(xiàn)ArrayIndexOutOfBoundsException報錯

以上是數(shù)組的動態(tài)初始化,特點:數(shù)組開辟空間之后,數(shù)組中每個元素的內容都是其對應數(shù)據(jù)類型的默認值

數(shù)組輸出

由于數(shù)組本身是一種順序式的結構,且長度固定,所以在進行數(shù)組內容輸出的時候,往往可以采用for循環(huán)的方式完成。因此就牽扯到數(shù)組長度的獲取,在Java中可以使用數(shù)組.length的屬性獲取數(shù)組的長度

public class MyClass {
    public static void main(String[] args){
        int data[] = new int[3];//聲明并創(chuàng)建數(shù)組
        //對數(shù)組賦值
        data[0] = 10;
        data[1] = 20;
        data[2] = 30;
        //利用數(shù)據(jù).length與for循環(huán)輸出數(shù)組
        for (int i = 0;i < data.length;i++){
            System.out.print(data[i]+"、");
        }
    }
}

數(shù)組的引用分析

引用數(shù)據(jù)類型的分析過程基本相同,所以數(shù)組的引用分析其本質也是一樣的,與對象的流程是相同的

聲明并開辟數(shù)組賦值內存關系圖

下圖的流程與普通對象的流程本質上是沒有任何差別的,唯一的區(qū)別是普通對象保存的是屬性,利用屬性名稱來操作,而數(shù)組保存的是一組內容,用索引來操作

聲明并開辟數(shù)組賦值內存關系圖
數(shù)組的引用內存關系圖

引用的本質是同一個堆內存可以被不同的棧內存所指向并修改

image.png

數(shù)組的靜態(tài)初始化

  • 動態(tài)初始化:只能在開辟數(shù)組空間之后才可以進行賦值

  • 靜態(tài)初始化:在數(shù)組開辟的同時就可以存在明確的內容,語法如下:

    簡化型:數(shù)據(jù)類型 數(shù)組名稱[] = {值,值,...};
    完全型(推薦使用):數(shù)據(jù)類型 數(shù)組名稱[] = new 數(shù)據(jù)類型[] {值,值,...};

  • 匿名對象的用法:new 數(shù)據(jù)類型[]{值,值,...};

二維數(shù)組

二維數(shù)組實際上與數(shù)據(jù)表的形式是相同的,由行和列組成,想要確定一個數(shù)據(jù)需要得知他的行和列的編號

列索引 0 列索引 1 列索引 2
行索引 0 23 5611 845
行索引 1 223 61 8
  • 靜態(tài)初始化:int data[] = new int[]{{值,值,...},{值,值,...},...}
  • 動態(tài)初始化:int data[] = new int[行個數(shù)][列個數(shù)] data = {{值,值,...},{值,值,...},...}
二維數(shù)組的置換:
public class MyClass {
    public static void main(String[] args){
        int data[][] = new int[][]{{1,2,3},{4,5,6},{7,8,9}};//創(chuàng)建二維數(shù)組
        for (int i = 0; i < data.length; i++){
            for (int j = 0; j < data[i].length; j++){
                //將二維數(shù)組進行置換
                int temp = data[i][j];
                data[i][j] = data[j][i];
                data[j][i] = temp;
            }
        }
        for (int i = 0; i < data.length; i++){
            for (int j = 0; j < data[i].length; j++){
                System.out.print(data[i][j]);//輸出
            }
            System.out.println();
        }
    }
}

一般用于訓練邏輯思維

數(shù)組相關操作方法

數(shù)組拷貝

System.arraycopy(原始數(shù)組,原始數(shù)組開始點,目標數(shù)組,目標數(shù)組開始點,拷貝長度);

范例:

  • 原始數(shù)組①: 1、\color{red}{2}、\color{red}{3}、\color{red}{4}、5、6、7、8、9;
  • 原始數(shù)組②:10、20、30、40、50、\color{red}{60}、\color{red}{70}、\color{red}{80}、90;
  • 希望將數(shù)組②的部分內容替換掉數(shù)組1的內容:\color{red}{60、70、80}
class ArrCopy{
    public static void main(String[] args){
        int data1[] = new int[]{1,2,3,4,5,6,7,8,9};
        int data2[] = new int[]{10,20,30,40,50,60,70,80,90};
        System.arraycopy(data2,5,data1,1,3);
        printArr(data1);
    }
    public static void printArr(int data[]){
        for (int i = 0; i < data.length; i++){
            System.out.print(data[i]+"、");
        }
    }
}

運行結果:1、60、70、80、5、6、7、8、9

數(shù)組排序

Arrays.sort(原始數(shù)組);

范例:

  • 原始數(shù)組:2、1、6、4、3、9、7、8、5
class ArrSort{
    public static void main(String[] args){
        int data[] = new int[]{2,1,6,4,3,9,7,8,5};
        Arrays.sort(data);
        printArr(data);
    }
    public static void printArr(int data[]){
        for (int i = 0; i < data.length; i++){
            System.out.print(data[i]);
        }
    }
}

運行結果:1、2、3、4、5、6、7、8、9

總結

  • 數(shù)組屬于引用數(shù)據(jù)類型
  • 數(shù)組屬于線性的存儲結構,里面的內容可以根據(jù)索引線性操作
  • 數(shù)組里面容易出現(xiàn)面試題!
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容