Java核心基礎第4篇-Java數組的常規操作


Java數組

image-20210713152724370

一、數組簡介

  • 數組是多個相同類型數據的組合,實現對這些數據的統一管理
  • 數組屬引用類型,數組型數據是對象(Object)
  • 數組中的元素可以是任何數據類型,包括基本類型和引用類型
  • 數組類型是單一,只能存放相同類型的數據
  • 數組一旦創建,大小就是固定的
  • 數組中每個元素都有自己的位置(下標),從0開始

所以數組一般用來存放大小固定的數據:例如存放班級學生成績

int scores = {100,90,98,99,88,80}

二、創建數組

關鍵數組的關鍵字:[]

int [] aint a[]含義是一樣的,[]變量名前后是沒有關系的。

2.1 只申明不賦值

type [] var;或者 type var [] ;

例如:

int score[];
int [] score;
Object [] obj;  //Object是java語法中老祖宗

2.2 申明並賦值

type [] var = new type[size]; //創建的是數據,數組的元素為空。值默認的就是該類型的默認值

type [] var = {elm,elem2,elem3,...} //創建的同時,把數據也賦值了

public static void main(String[] args) {

    // 申明 默認值
    int score[] = new int[9];
    for(int i = 0;i<score.length;i++) {
        System.out.print(score[i]+"\t");
    }

    System.out.println("------------");
    //創建並且賦值
    int score2[] = {100,90,88,85,66};
    for(int i = 0;i<score2.length;i++) {
        System.out.print(score2[i]+"\t");
    }

image-20200821091300927

2.3 new數組內存模型

new:java中的關鍵字,主要作用用來在內存中,開辟新的空間,從而創建新的對象

image-20200821093935851

2.4 下標操作元素

2.4.1 通過下標給元素賦值

int score[] = new int[9];

//指定元素賦值
score[2] = 10;
score[5] = 50;

2.4.2 通過下標獲取元素內容

int num2 = score[2];
System.out.println("num2="+num2);

for(int i = 0;i<score.length;i++) {
    System.out.print(score[i]+"\t");
}

2.5 注意事項

  • Java中使用關鍵字 new 創建數組對象
  • 定義並用運算符 new 為之分配空間后,才可以引用數組中的每個元素;
  • 數組元素的引用方式:數組名[數組元素下標]
    • 數組元素下標可以是整型常量或整型表達式。如a[3] , b[i] , c[6*i];
    • 數組元素下標從0開始;長度為n的數組合法下標取值范圍: 0 - n-1;如int a[]=new int[3]; 可引用的數組元素為a[0]、a[1]、a[2]
  • 每個數組都有一個屬性 length 指明它的長度,例如:a.length 指明數組 a 的長度(元素個數)

image-20200821094832884

三、遍歷數組

遍歷數組可以通過下標,或者增強foreach循環來進行元素的遍歷

3.1 普通for循環

因為可以使用arr[index]方式訪問元素,所以我們可以通過arr.length來循環獲取不同索引的值;

但是注意:索引的范圍是:0-(length-1),不能大於等於length因為下標是從0開始計算。不然拋出數組越界異常

int score[] = {100,90,88,85,66};
for(int i = 0;i<score.length;i++) {
    System.out.println(score2[i]);
}

以上就是將score數組中所有的元素遍歷了一次,並打印出來

3.2 增強for循環

Java有一種功能很強的循環結構,可以用來依次處理數組中的每個元素而不必為指定下標值而分心。
這種增強的for循環的語句格式為:

for(variable : arr)statement

例如:

int score[] = {100,90,88,85,66};
for(int ele:score){
    System.out.println(ele);
}

這種語法和上面普通的for循環達到的效果是一樣的。這種for each循環語句顯得更加簡潔、更不易出錯

四、數組拷貝

如果希望將一個數組的所有值拷貝到一個新的數組中去,就要使用Arrays類的copyOf方法:

第2個參數是新數組的長度。這個方法通常用來增加數組的大小

int score[] = {100, 90, 88, 85, 66};

//長度超過原數據的部分:使用默認0替代
int[] newArr01 = Arrays.copyOf(score, 10);

//長度不足的,從前往后取對應的數據
int[] newArr02 = Arrays.copyOf(score, 3);

System.out.println("原數組 = " + Arrays.toString(score));
System.out.println("新數組1 = " + Arrays.toString(newArr01));
System.out.println("新數組2 = " + Arrays.toString(newArr02));

image-20210713155112696

注意事項:

  • 如果數組元素是數值型,那么多余的元素將被賦值為0;
  • 如果數組元素是布爾型,則將賦值為false。
  • 相反,如果長度小於原始數組的長度,則只拷貝最前面的數據元素。

五、數組排序

5.1 Arrays工具類排序

java.util.Arrays:屬於工具類,所以在使用之前,必須先導包

public static void main(String[] args) {
    int score [] = {99,89,78,88,69,70};
    String ch[] = {"B","C","A","F","D"};
    System.out.println("排序前:");
    for (int i = 0; i < ch.length; i++) {
        System.out.print(ch[i]+"\t");
    }
    System.out.println();

    //進行排序
    //1.只提供了升序排序 從小到大  沒有提供降序。自己去實現
    //2.也叫做自然順序。 A(65) B(66) C(67) D(68)
    Arrays.sort(ch);

    System.out.println("排序后:");
    for (int i = 0; i < ch.length; i++) {
        System.out.print(ch[i]+"\t");
    }
}

image-20200821134539385

4.2 通過算法實現排序(冒泡)

升序為例:

  1. 將相鄰的兩個數,進行比較,將大的數據往后移動。依次循環進行比較,從而找到最大的數據
  2. 由於每一次循環只能確定一個數據,所以需要多次嵌套循環來完成最終的排序
  3. 詳細如下圖

冒泡排序

public static void main(String[] args) {

    int score [] = {99,89,78,88,69,70};
    //i=0 {89,78,88,69,70,99};
    //i=1 {78,88,69,70,89,99};
    //i=2 {78,69,70,88,89,99};

    System.out.println("第原始的結果:");
    for (int j = 0; j < score.length; j++) {
        System.out.print(score[j]+"\t");
    }
    System.out.println();

    //排序:把前面幾次排好了,最后一個自動確定了位置 。少排序一次
    //每次選一個最大的
    for (int i = 0; i < score.length-1; i++) {

        //相鄰的兩個進行比較,把大的往后移
        for (int j = 0; j < score.length-1-i; j++) {
            //如果說 前面比后面的大,兩者更換位置
            if(score[j]>score[j+1]) {
                //兩兩互換,通過臨時變量
                int temp = score[j];
                score[j] = score[j+1];
                score[j+1] = temp;
            }

        }
        System.out.println("第"+(i+1)+"次執行的結果:");
        for (int j = 0; j < score.length; j++) {
            System.out.print(score[j]+"\t");
        }
        System.out.println();
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM