為了賬號安全,請及時綁定郵箱和手機立即綁定

【JAVA零基礎入門系列】Day10 Java中的數組

2017.12.18 16:38 7657瀏覽

什么是數組?顧名思義,就是數據的組合,把一些相同類型的數放到一組里去。

那為什么要用數組呢?比如需要統計全班同學的成績的時候,如果給班上50個同學的成績信息都命名一個變量進行存儲,顯然不方便,而且在做成績統計,如求總分,平均分,方差等的時候,遍歷成績信息又成了一大難題,這個時候,你就需要用到數組了。

數組可以很好的解決這兩個問題,數組名只有一個,只需要使用數組名加下標來訪問各個元素的信息即可,遍歷的時候,由于下標是連續的,所以訪問起來十分方便。

接下來,就開始正式介紹一下數組吧。

數組是用于存儲相同數據類型的集合,使用數組前需要先聲明數組,聲明方式為:int[] a; 這里只聲明了變量,并沒有真正初始化為數組。應該使用new運算符創建數組,int[] a = new int[100]; 這里聲明了一個大小為100的整數型數組,也就是說,里面可以存放最多一百個整數。需要注意的是,數組的下標是從0-99,而不是1-100,所以,數組里的最后一個數是a[99]而不是a[100],數組定義好之后,就可以用循環結構來進行賦值操作。

int[] a = new int[100];
for(int i = 0; i < 100; i++)
    a[i] = i;

新建的數字數組,里面元素都會被初始化為0,如果是邏輯型數組,則都會初始化為假,對象型數組則初始化為null,當你創建一個字符串數組的時候,里面元素都是null而不是空字符串,所以如果希望初始化后為空串,則需要像上述操作那樣,遍歷每個元素來賦值空串。

對于Java中的數組遍歷,還有一種更簡便的方法,類似于C#中的for each循環,Java也有同樣的for each操作。

for(int element:a)
    System.out.println(element);

這段代碼會依次打印a中的元素,每個元素占一行,這里的每次循環,都會將數組a中的一個元素暫存在element中,處理完之后在將下一個元素存放在element中。這樣做的好處是,省略了下標處理,這樣就不存在下標越界的問題了,看起來也更加簡潔。當然,如果在循環中需要利用下標進行一些判斷或者處理,就只能需要使用普通的for循環來處理了。兩種方法各有優點,具體情況具體分析即可。

對于數組的初始化,有幾種比較常見的方式。

int[] a={1,2,3,4,5};//這里不需要使用new
new int[]{2,3,4,5,6};//匿名數組
a = new int[]{2,3,4,5,6};

如果你有學過C或者C++的話,這里的int[] a= new int[100]; 相當于C++中的int* a = new int[100];也就是說,數組變量是一個指針,所以將一個數組變量拷貝給兩一個數組變量時,它們將指向同一個數組。舉個栗子:

int[] a;
int[] b = {3,4,5,6};
a = b;
a[2] = 10;
System.out.println(b[2]);

這里將輸出10,也就是說b指向的數組的元素被改變了。如果只想把一個數組里的元素的值拷貝到另一個數組中去的話,就要使用Arrays類的copyOf方法,這個方法有兩個參數,第一個是需要拷貝的數組,第二個是需要拷貝的長度。來看一個栗子:

package pers.frank.test;
import java.util.Arrays;

public class Test{
    public static void main(String[] args) {
        int[] a;
        int[] b = {3,4,5,6};
        a = Arrays.copyOf(b,8);
        a[2] = 10;
        System.out.println("==B==");
        for(int i:b)
            System.out.println(i);
        System.out.println("==A==");
        for(int i:a)
            System.out.println(i);
    }
}

這樣,會循環輸出數組b和數組a的各個元素。

  圖片描述

這里我們將第二個參數設置成了8,而數組b的長度只有4,那結果會怎樣呢?答案顯而易見,會把多的長度用0填充。

在前面的栗子里,我們經常看到Java應用程序里帶有String[] args的main方法,這個參數表名,main方法接收一個字符串數組,也就是命令行參數。舉個栗子:

public class Test{
    public static void main(String[] args) {
        if(args[0].equals("-h"))
            System.out.print("Hello,");
        else if (args[0].equals("-g"))
            System.out.print("Goodbye,");
        for(int i = 1; i < args.length; i++)
            System.out.print(" "+ args[i]);
        System.out.print("!");
    }
}

運行結果如下:

  圖片描述

下面再講講數組排序,Arrays類中有一個sort方法,用于給數組的元素進行排序,使用的是快速排序算法,算是效率比較高的算法了。這里舉個栗子進行演示。

import java.util.Arrays;

public class Test{
    public static void main(String[] args) {
        int[] numbers = new int[10];
        for(int i=0;i<10;i++){
            numbers[i] = (int)(Math.random()*10);
        }
        System.out.println("Before Sort:");
        for (int j:numbers){
            System.out.println(j);
        }
        Arrays.sort(numbers);
        System.out.println("After Sort:");
        for (int j:numbers){
            System.out.println(j);
        }
    }
}

圖片描述

最后再說說多維數組吧,之前的數組只能算是一維數組,二維數組就像Excel的表格那樣,有著行跟列,如果有了解過矩陣的話,那對于二維數組應該就不陌生了,在Java中聲明二維數組也很簡單: int[][] number; 只比一維數組多了一對[]。同樣也需要用new來定義數組大小。當然也可以使用類似于一維數組的初始化方法。

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

數組元素的訪問同樣需要使用兩個方括號,如numbers1,這里的值是數字6,第一個方括號里代表行號,第二個方括號里代表列號,所以這里就是第二行,第三列的數。如果需要遍歷二維數組的話,就需要使用兩個for循環了,

for(int i=0;i<numbers.length;i++){
  for(int j=0;j<numbers[i].length;j++){
    System.out.println(numbers[i][j]);
  }
}

至于更高維度的數組,一般不會用到,這里就不多介紹了。

至此本篇講解完畢,歡迎大家繼續關注!

真正重要的東西,用眼睛是看不見的。

【JAVA零基礎入門系列】(已完結)導航目錄

點擊查看更多內容

本文原創發布于慕課網 ,轉載請注明出處,謝謝合作

14人點贊

若覺得本文不錯,就分享一下吧!

評論

相關文章推薦

正在加載中
意見反饋 幫助中心 APP下載
官方微信

舉報

0/150
提交
取消
lpl竞猜