Java數(shù)組

數(shù)組:

數(shù)組是具有多個連續(xù)存儲的相同數(shù)據(jù)類型的變量組成的集合體茄茁。

數(shù)組元素:

構(gòu)成一個數(shù)組的每一個數(shù)據(jù)都是數(shù)組元素。

數(shù)組下標:

表示數(shù)組元素在數(shù)組中的位置,用整數(shù)表示,從0開始非剃,依次加一洽腺,也可以叫做索引(index)嗦嗡,下標的界限為0到數(shù)組長度(數(shù)組大械ň纭)-1旱物,下標如果是負數(shù)遥缕,或者下標超過了數(shù)組長度-1,會發(fā)生越界(ArrayIndexOutOfbounds)宵呛。

使用數(shù)組的步驟:

1.定于數(shù)組
2.為數(shù)組元素分配內(nèi)存
3.數(shù)組元素初始化
4.使用數(shù)據(jù)

數(shù)組長度:

數(shù)組中元素的個數(shù)单匣,也稱為數(shù)組大小,獲取數(shù)組長度的方法為數(shù)組名.length宝穗,數(shù)組的長度是在為數(shù)組分配內(nèi)存時確定大小户秤,大小不可以改變,如果需要擴大或者縮小逮矛,需要重新定義一個數(shù)組鸡号。

數(shù)組的定義和使用:

數(shù)據(jù)類型 []數(shù)組名; 或者 數(shù)據(jù)類型 數(shù)組名[]; 定義數(shù)組本質(zhì)上就是向JVM虛擬機申請數(shù)據(jù)。JVM將內(nèi)存劃分為棧须鼎、堆鲸伴、方法區(qū)幾個區(qū)域,不同的區(qū)域存儲不用類別的數(shù)據(jù)莉兰。JVM在定義數(shù)組時是將數(shù)組的名稱存儲在棧中,棧是一個先進后出的數(shù)據(jù)結(jié)構(gòu)礁竞。指出數(shù)組元素的個數(shù)糖荒,通過new運算符,讓系統(tǒng)為數(shù)組元素分配內(nèi)存空間模捂,數(shù)組元素存儲在堆中捶朵。數(shù)組元素的初始化就是第一次賦值,沒有初始化的數(shù)組元素為默認值狂男。

數(shù)組的數(shù)據(jù)結(jié)構(gòu)(線性表):

全名為線性存儲結(jié)構(gòu)综看,使用線性表存儲數(shù)據(jù)的方式可以理解為把所有數(shù)據(jù)用一根線串起來,存儲到物理空間中岖食。

數(shù)組的排序:

排序算法有很多種红碑,常用的有冒泡排序、插入排序泡垃、選擇排序析珊、快速排序、堆排序蔑穴、歸并排序忠寻、希爾排序、二叉樹排序存和、計時排序等等奕剃。

列舉幾個我學過的例子:

冒泡排序代碼案例

public static void main(String[] args) {

int score[] =new int[80000]; // 定義數(shù)組大小

    Random random =new Random();

    for (int i =0; i < score.length; i++) {

           score[i] = random.nextInt(80000); // 隨機生成數(shù)組元素

    }

long start = System.currentTimeMillis(); // 開始計時

for (int i =0; i < score.length-1;i++){

      for (int j =0;j < score.length-i-1;j++){

           if (score[j] > score[j +1]) {

                int tmp = score[j];

                score[j] = score[j +1];

                score[j +1] = tmp; //數(shù)據(jù)進行兩兩比較衷旅,較小的放在前面,較大的放在后面纵朋,依次類推柿顶,直至全部確定位置,排序完畢

            }

}

}

long end = System.currentTimeMillis();// 計時結(jié)束

    System.out.println(end-start);// 輸出排序所用的時間

}
數(shù)據(jù)進行兩兩比較倡蝙,較小的放在前面九串,較大的放在后面,依次類推寺鸥,直至全部確定位置猪钮,排序完畢。

插入排序代碼案例

public static void main(String[] args) {

int arr[] =new int[80000]; // 定義數(shù)組大小

    for (int i=0 ;i <80000;i++){

     arr[i] = (int)(Math.random()*80000); // 隨機生成數(shù)組元素

    }

long start = System.currentTimeMillis(); //計時開始

    for (int i =0; i < arr.length ; i++) {

          int j = i; 

        while(j >0){

             if(arr[j] < arr[j-1]){

                 int tmp;

                tmp = arr[j];

                arr[j] = arr[j-1];

                arr[j-1] = tmp;

                j--;

            }

else{

break;

            }

}

} // 從第二個數(shù)據(jù)開始胆建,依次和前面的數(shù)據(jù)進行兩兩比較烤低,比前面的數(shù)據(jù)小則繼續(xù)進行比較,比前面的數(shù)據(jù)大則插入到該數(shù)據(jù)的后方笆载,到了下標為0的位置則直接插入扑馁,依次類推,直至全部確定位置凉驻,排序完畢腻要。

long end = System.currentTimeMillis(); //計時結(jié)束

    System.out.print(end - start); // 輸出排序所用時間

}
從第二個數(shù)據(jù)開始,依次和前面的數(shù)據(jù)進行兩兩比較涝登,比前面的數(shù)據(jù)小則繼續(xù)進行比較雄家,比前面的數(shù)據(jù)大則插入到該數(shù)據(jù)的后方,到了下標為0的位置則直接插入胀滚,依次類推趟济,直至全部確定位置,排序完畢

選擇排序案例代碼

public static void main(String[] args) {

int arr[] =new int[80000]; // 定義數(shù)組的大小

    Random input =new Random();

    for (int i =0; i < arr.length; i++) {

          arr[i] = input.nextInt(80000); // 隨機生成數(shù)組元素

    }

    long start = System.currentTimeMillis(); // 計時開始

     for (int i =0; i < arr.length-1; i++) {

            int minIndex = i;

                 int min = arr[i];

                 for (int j = i+1; j < arr.length; j++) {

                      if (arr[j] < min) {

                      min = arr[j];

                      minIndex = j;

               }

      }

            int tmp = arr[i];

            arr[i] = arr[minIndex];

            arr[minIndex] = tmp;

    } // 選中下標為0的數(shù)據(jù)和后面的數(shù)據(jù)兩兩進行比較咽笼,如果后者比前者小顷编,則記錄后者的下標,然后用后者和后面的數(shù)據(jù)進行兩兩比較剑刑,一輪比較完成后媳纬,最后那個被記錄下標的元素與第一個數(shù)據(jù)比較,較小則交換位置并且確定位置施掏,之后選中下標為1的數(shù)據(jù)進行上述操作层宫,每比較一輪確定一個數(shù)據(jù)的位置,直至全部確定其监,排序完畢萌腿。

   long end = System.currentTimeMillis(); //計時結(jié)束

    System.out.println(end-start); // 輸出排序所用的時間

    System.out.println(Arrays.toString(arr)); // 輸出隨機生成數(shù)組元素的數(shù)組

}
 選中下標為0的數(shù)據(jù)和后面的數(shù)據(jù)兩兩進行比較,如果后者比前者小抖苦,則記錄后者的下標毁菱,然后用后者和后面的數(shù)據(jù)進行兩兩比較米死,一輪比較完成后,最后那個被記錄下標的元素與第一個數(shù)據(jù)比較贮庞,較小則交換位置并且確定位置峦筒,之后選中下標為1的數(shù)據(jù)進行上述操作,每比較一輪確定一個數(shù)據(jù)的位置窗慎,直至全部確定物喷,排序完畢

使用數(shù)組時的常見問題:

(1)下標越界異常

例如一個擁有五個元素的數(shù)組,下標分別為0遮斥、1峦失、2、3术吗、4尉辑,輸出時下標不能大于4,輸出的下標大于4時较屿,系統(tǒng)會提示運行該程序時發(fā)生了java.labg.ArrayIndexOutOfBoundsException異常隧魄,表示下標越界了,數(shù)組下標超過0——數(shù)組長度-1的范圍的值就會發(fā)生下標越界異常隘蝎。

(2)沒有分配內(nèi)存空間

例如一個數(shù)組score[] = null;輸出時系統(tǒng)提示運行該程序時發(fā)生了java.lang.NullPointerException異常购啄,表示空指針異常,這個程序只為數(shù)組名在棧中分配了內(nèi)存嘱么,但是沒有在堆中為數(shù)組元素分配內(nèi)存狮含。

(3)語法錯誤

數(shù)組類型 數(shù)組名[] //中括號中不允許寫長度;數(shù)組類型 數(shù)組名 = new 數(shù)組類型[] {數(shù)組元素} //直接為數(shù)組元素初始化不允許指定數(shù)組長度拱撵;錯誤類型:數(shù)組類型 數(shù)組名[];換行 數(shù)組名 = {數(shù)組元素} //直接初始化數(shù)組元素的代碼必須寫在同一行辉川。

二維數(shù)組

定義方法:數(shù)據(jù)類型 [][]數(shù)組名 或者 數(shù)據(jù)類型 數(shù)組名[][]表蝙,第一個[]表示第一維拴测,第二個[]表示第二維。

二維數(shù)組中數(shù)據(jù)的元素類型必須相同府蛇,表示一個一維數(shù)組集索,這個一維數(shù)組的每一個元素又是一個一維數(shù)組。

Arrays類

常用方法:

1.equals(數(shù)組名1汇跨,數(shù)組名2) 返回類型為boolean 用于比較兩個數(shù)組是否相等务荆。

2.sorry(數(shù)組名) 返回類型為void 對數(shù)組的元素進行排序。

3.toString(數(shù)組名) 返回類型為String 把一個數(shù)組轉(zhuǎn)換成一個字符串穷遂。

4.fill(數(shù)組名1函匕,元素值) 返回類型為void 把數(shù)組的所有元素都賦值成元素值。

5.copyOf(數(shù)組名1,length) 返回類型與數(shù)組1數(shù)據(jù)類型相同 把數(shù)組復(fù)制成一個長度為length的新數(shù)組蚪黑。

6.binarySearch(數(shù)組名,元素值) 返回類型為int 查詢元素值在數(shù)組中的下標盅惜。

數(shù)組的輸出:

Systom.out.print(數(shù)組名稱) 這樣輸出的是數(shù)組的內(nèi)存地址編號 Systom.out.print(Arrays.toString) 這樣輸出的是數(shù)組元素

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末中剩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抒寂,更是在濱河造成了極大的恐慌结啼,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屈芜,死亡現(xiàn)場離奇詭異郊愧,居然都是意外死亡,警方通過查閱死者的電腦和手機井佑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門属铁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人毅糟,你說我怎么就攤上這事红选。” “怎么了姆另?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵喇肋,是天一觀的道長。 經(jīng)常有香客問我迹辐,道長蝶防,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任明吩,我火速辦了婚禮间学,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘印荔。我一直安慰自己低葫,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布仍律。 她就那樣靜靜地躺著嘿悬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪水泉。 梳的紋絲不亂的頭發(fā)上善涨,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音草则,去河邊找鬼钢拧。 笑死,一個胖子當著我的面吹牛炕横,可吹牛的內(nèi)容都是我干的源内。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼份殿,長吁一口氣:“原來是場噩夢啊……” “哼膜钓!你這毒婦竟也來了塔鳍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤呻此,失蹤者是張志新(化名)和其女友劉穎轮纫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焚鲜,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡掌唾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忿磅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糯彬。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖葱她,靈堂內(nèi)的尸體忽然破棺而出撩扒,到底是詐尸還是另有隱情,我是刑警寧澤吨些,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布搓谆,位于F島的核電站,受9級特大地震影響豪墅,放射性物質(zhì)發(fā)生泄漏泉手。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一偶器、第九天 我趴在偏房一處隱蔽的房頂上張望斩萌。 院中可真熱鬧,春花似錦屏轰、人聲如沸颊郎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姆吭。三九已至,卻和暖如春叨粘,著一層夾襖步出監(jiān)牢的瞬間猾编,已是汗流浹背瘤睹。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工升敲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人轰传。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓驴党,卻偏偏與公主長得像,于是被迫代替她去往敵國和親获茬。 傳聞我的和親對象是個殘疾皇子港庄,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 1.了解數(shù)組 數(shù)組倔既,大家都不陌生,數(shù)組對于每一門編程語言都是重要的數(shù)據(jù)結(jié)構(gòu)之一鹏氧,當然不同編程語言對于數(shù)組的應(yīng)用和實...
    凝時閱讀 267評論 0 1
  • 1.了解數(shù)組 數(shù)組渤涌,大家都不陌生,數(shù)組對于每一門編程語言都是重要的數(shù)據(jù)結(jié)構(gòu)之一把还,當然不同編程語言對于數(shù)組的應(yīng)用和實...
    凝時閱讀 1,170評論 2 22
  • 一实蓬、初步認識數(shù)組 1.理解數(shù)組 Java提供了數(shù)組這種數(shù)據(jù)結(jié)構(gòu),主要可以將大量的數(shù)據(jù)存儲起來 定義:數(shù)組是用來存儲...
    lipingLi_2019閱讀 211評論 0 1
  • 數(shù)組基本語法 定義:數(shù)組是相同類型的數(shù)據(jù)按順序組成的一種引用數(shù)據(jù)類型作用:用于將相同數(shù)據(jù)類型的多項數(shù)據(jù)存儲在連續(xù)的...
    若兮緣閱讀 596評論 0 8
  • Java 數(shù)組 數(shù)組可以理解為是一個巨大的“盒子”吊履,里面可以按順序存放多個類型相同的數(shù)據(jù)安皱,比如可以定義 int 型...
    夢想旅行家Jirry閱讀 419評論 0 0