java基礎 數組

來源:互聯網
上載者:User

標籤:sys   fbo   關心   hello   屬性   頻繁   公司   ati   尋找   

什麼是數組,一組資料,一堆資料:

所謂數組,是在程式設計中,為了處理方便,把具有相同類型的若干變數按有序的形式組織起來的一種資料形式。這些按一定順序排列的同類型資料的集合稱為數組。而數組中的每一個資料稱之為數組元素,數組中的元素以索引來表示其存放的位置,索引從0開始,步長是1,有點像Excel表格的行號,逐行遞增。 好比賓館的房間.

數組的定義:相同類型、若干變數、有序元素:索引:從0 開始,步長為1。變數的定義格式:資料類型 變數名 = 初始化值數組的定義格式:資料類型[] 數組名; int[] ages;數組必須初始化,
基礎資料型別 (Elementary Data Type):byte,short,int,long,float,double,char,boolean引用資料類型:類,介面,數組.-------------------------------------------------變數的定義:   資料類型  變數名;  如: int  age;數組的定義:   方式1: 數組元素的類型[]  數組名;   int[] ages;推薦的. 可以吧int[]看成是一種資料類型,int類型的數群組類型.   方式2:數組元素的類型  數組名[];    int ages[];------------------------------------------------------數組必須先初始化,才能使用,因為初始化表示在記憶體中分配空間.
數組的初始化
Java中數組必先初始化後才能使用,所謂初始化就是給數組元素分配記憶體,並為每個元素賦初始值。初始化數組的兩種方式:?靜態初始化;?動態初始化;無論,以哪種方式初始化數組,一旦初始化完成,數組的長度就固定了,不能改變,除非重新初始化。也就是說數組是定長的。   數組是定長的: 數組一旦初始化成功,數組中的元素個數就已經固定了,不能更改,如果需要更改,只能重新做初始化.
數組的靜態初始化操作:

特點:由我們自己來為每一個數組元素設定初始化值,而數組的長度由系統(JVM)決定.

文法:

數組元素類型[]  數組名 = new 數組元素類型[]{元素1,元素2,元素3,.......};   舉例:   int[] nums = new  int[]{1,3,5,7,9};   簡單寫法,必須聲明之後,立刻初始化,不能先聲明後初始化:    int[] nums = {1,3,5,7,9};

 

 

 

 數組的動態初始化操作:

 由我們來設定數組的元素個數(數組長度),而每一個數組元素的初始值有系統決定.

 文法:

數組元素類型[]  數組名 = new  數組元素類型[ length ];    比如:    int[] ages = new  int[100];-------------------------------------------------------------  int[] nums = new  int[5]{1,3,5,7,9};//寫法是錯誤的,不能同時使用靜態初始化和動態初始化.

什麼時候使用靜態初始化,什麼時候使用動態初始化.

當我們事Crowdsourced Security Testing道,需要儲存哪一些資料的時候,選用靜態初始化.當我們事先不知道,需要儲存哪些資料的時候,只能使用動態初始化.

 

 

數組的基本操作1.數組的基本操作
       擷取元素:  元素類型 變數 =  數組名[index];       設定元素:  數組名[index] = 值;       遍曆數組元素: 建議使用for迴圈,事Crowdsourced Security Testing道迴圈的次數.       數組長度:  int len = 數組名.length;  length是屬性,不是方法.       索引範圍:  從0開始,逐一遞增.   [0,數組名.length-1]

 

2:運算元組常見異常:
 NullPointerException:null 指標異常(Null 參考).            當數組還未初始化,就直接運算元組.        String[] bs = null;        System.out.println(bs.length)       ArrayIndexOutOfBoundsException:數組的索引越界異常.
3:擷取數組最大最小元素(getMax,getMin).

 

4:列印數組元素:
直接列印數組的時候,列印出來是hashCode值,如[[email protected]       我們不喜歡,我們想列印數組的時候,把該數組的元素列印出來.        String[] arr = {"A","B","C","D","E"};定義方法列印:字串表示形式由數組的元素列表組成,括在方括弧("[]")中。相鄰元素用字元 ", "(逗號加空格)分隔。列印格式:[A, B, C, D, E]

 

 5:逆序排列數組元素 
原數組:[A, B, C, D, E]        逆序操作        新數組:[E, D, C, B, A]

6:元素出現索引(第一次/最後一次),線性搜尋.
int[] arr = {10,20,30,10,50,-30,10};         擷取元素10在arr數組中第一次出現的索引(indexOf):   0         擷取元素10在arr數組中最後一次出現的索引(lastIndexOf):6

 

 

 

 

main方法的數組參數

main方法是static修飾的,說明直接使用Hello類調用即可.在底層是JVM通過Hello.main(new String[]{});main方法的String數組參數,其實是暴露給程式運行者的,用於給程式傳遞一個資料資訊.

 

 

多維陣列
前面說了,數組是多個資料的集合.int[] arr = new int[] {1,3,5,7,9};如果現在有多個數組,我想把多個數組儲存在一個集合中,此時我又應該如何完成.int[] arr1 = {1,2,3};int[] arr2 = {4,5};int[] arr3 = {6};把上述的每個數組都作為一個元素,那麼此時元素的類型為:int[].
數組的文法:
數組元素類型[] 數組名;int[][]  arr = new int[][]   {    arr1 ,arr2,arr3};int[][]  arr = new int[][]   {    {1,2,3} ,    {4,5},    {6}};
多維陣列:數組中的數組,與C語言的區別文法:數組元素類型[][] 數組名;對多維陣列的理解int[3][5]:二維數組三個元素,一維數組5個元素遍曆二維數組裡的元素理解二維數組的值傳遞機制
一維數組:數組中的每一個元素都是一個值(基本類型和參考型別的值).二維數組:數組中的每一個元素又是一個一位元組.三維數組:數組中的每一個元素又是一個二維數組.-------------------------------------------------------------------------------嚴格上說,在Java中不存在多維陣列的概念,和C語言做區分,一般稱之為數組中的數組.
二維數組的初始化操作:

靜態初始化:

int[][]  arr = new int[][]   {    {1,2,3} ,    {4,5},    {6}};

動態初始化:

int[][]  arr = new int[3][5] ;建立一個長度為3的二維數組,每一個元素(一維數組)的長度為5.int[][]  arr = new int[0][5] 

針對於N維數組,需要N個迴圈嵌套.

 

 

 java5對數組的新文法支援
Java5對數組的新文法支援:   1):增強for迴圈-foreach   2):方法的可變參數
增強for迴圈-foreach:

需求:定義一個數組,使用迴圈迭代出數組中的每一個元素.

使用for迴圈的操作如下:

 

其實,我們在使用迴圈迭代數組的時候,往往是不關心迭代變數(數組的索引),有沒有更好的方式,迭代數組元素的時候,就只運算元組元素,不去運算元組的索引. 從Java5開始(JDK1.5)開始,Java提供了一種新的文法:增強for迴圈(foreach). 文法:

 

for(數組元素類型 變數  :   數組名){       迴圈體}

通過反編譯工具查看位元組碼,發現foreach其實在底層依然是使用for迴圈+索引來運算元組的.我們把增強for迴圈,稱之為編譯器的新特性---->文法糖.文法糖的最大甜頭就是:讓開發人員寫更少,更簡單的代碼,完成相同的功能.-----------------------------------------------------------for迴圈功能比foreach更彪悍.------------------------------------------------------------如果迭代數組元素,而不關心數組的索引的時候,首選使用foreach.-----------------------------------foreach還未結束--->集合架構.

 

 方法的可變參數:

需求:編寫一個方法,統計使用數組傳遞過來的總和.

但是心裡不爽:    1):為了求多個數之和,我還得先建立一個數組來儲存資料.    2):如果多個數是變化的,比如求3個數之和,變成求5個數之和.......,還得去修改我的數組,但是數組是定長的.說人話:我期望調用求和的方法是這樣調用的.

要解決該問題,必須使用Java5的另一個新特性,方法的可變參數,說的是參數的個數可變.

 

方法的可變參數,其實也是一個文法糖,編譯器層級的新特性,讓開發人員寫代碼更簡單.方法的可變參數其底層是就是一個數群組類型.可變參數必須作為方法的最後一個參數,避免參數的歧義性.  推論:方法最大隻有一個可變參數.

數組元素的拷貝

 

數組拷貝:從指定源數組中複製一個數組,複製從指定的位置開始,到目標數組的指定位置結束。從 src 引用的源數組到 dest 引用的目標數組,數組組件的一個子序列被複製下來。被複製的組件的編號等於 length 參數。源數組中位置在 srcPos 到 srcPos+length-1 之間的組件被分別複製到目標數組中的 destPos 到 destPos+length-1 位置。public static void arraycopy(int[] src, int srcPos, int[] dest,int destPos, int length) {}

 

 

 Java內建數組工具類Arrays
數組的演算法操作,使用太頻繁了,SUN公司就直接在JDK中提供了一個數組的工具類(Arrays).java.util.Arrays類:int binarySearch(type[] arr,type key)    使用二分法尋找數組裡某元素並返回其索引,若找不到返回負數.void sort(type[] arr)    使用調優後的快速法對指定數組排序。String toString(type[] arr)    返回指定數組內容的字串表示形式。public static type[] copyOf(type[] original, int newLength)    複製指定的數組,截取或用 0 填充(如有必要),以使副本具有指定的長度。---------------------------------------------使用注意:必須java.util.Arrays.方法(參數);

 

 

 

 

java基礎 數組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.