標籤: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基礎 數組