Java之:數(shù)組類型

數(shù)組是編程語(yǔ)言中最常見的一種數(shù)據(jù)結(jié)構(gòu),可以存儲(chǔ)多個(gè)數(shù)據(jù),每一個(gè)數(shù)組元素存放一個(gè)數(shù)據(jù),可以通過數(shù)組的下標(biāo)索引來訪問數(shù)組元素,也可以通過下標(biāo)索引來賦值。

目前成都創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、高昌網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

理解數(shù)組

在Java中,一個(gè)數(shù)組要求具有相同的數(shù)據(jù)類型,一旦數(shù)組初始化完成,那么數(shù)組在內(nèi)存中所占用的空間將被固定下來,所以說,數(shù)組的長(zhǎng)度是不可改變的,就算是把某個(gè)數(shù)組元素清空,也同樣會(huì)被保留空間,依然屬于這個(gè)數(shù)組。

Java的數(shù)組既可以存儲(chǔ)基本數(shù)據(jù)類型,也可以存儲(chǔ)引用數(shù)據(jù)類型,唯一的條件就是要求具有相同的數(shù)據(jù)類型。

定義數(shù)組

Java中定義數(shù)組有兩種方式,如下,推薦使用第一行那種方式,有著更直觀的語(yǔ)意,并且還具有更好地可讀性

int[] arr1;

int arr2[];

數(shù)組是一種引用類型的變量,因此使用它定義一個(gè)變量時(shí),僅僅表示定義了一個(gè)引用變量(等于定義了一個(gè)指針),這個(gè)引用變量還未指向任何有效的內(nèi)存,因此定義數(shù)組時(shí)不能指定數(shù)組的長(zhǎng)度。而且由于定義數(shù)組只是定義了一個(gè)引用類型變量,并未指向任何有效的內(nèi)存空間,所以還沒有空間來存儲(chǔ)數(shù)組元素,因此,這個(gè)數(shù)組也不能夠被使用,只有對(duì)數(shù)組完成初始化后才能夠使用。

數(shù)組的初始化

Java中數(shù)組必須先初始化后才能夠被使用,初始化就是為數(shù)組分配指定的內(nèi)存空間,并給數(shù)組賦初始值。

有兩種初始化的方式:

靜態(tài)初始化:初始化時(shí)直接指定每個(gè)元素的初始值,由系統(tǒng)決定數(shù)組長(zhǎng)度。

動(dòng)態(tài)初始化:初始化時(shí)直接指定數(shù)組長(zhǎng)度,由系統(tǒng)為數(shù)組分配初始值。

靜態(tài)初始化

假如我現(xiàn)在定一個(gè)int類型數(shù)組:

初始化數(shù)組時(shí)候直接在花括號(hào)中寫好對(duì)應(yīng)的值,系統(tǒng)會(huì)自動(dòng)確定數(shù)組的長(zhǎng)度,此時(shí)這個(gè)arr數(shù)組內(nèi)部就有了1到10這些int類型的值。

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

當(dāng)然,還有一種寫法也可行:

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

動(dòng)態(tài)初始化

假如我現(xiàn)在定一個(gè)int類型長(zhǎng)度為10的數(shù)組:

動(dòng)態(tài)初始化時(shí)候指定數(shù)組的長(zhǎng)度,系統(tǒng)會(huì)自動(dòng)為數(shù)組內(nèi)部元素指定初始值

int[] arr = new int[10];

數(shù)組的類型可以是整數(shù)類型、浮點(diǎn)類型、字符類型、布爾類型和引用類型。

數(shù)組的使用

數(shù)組的使用包括取出數(shù)組元素和賦值數(shù)組。訪問數(shù)組元素是通過在數(shù)組后緊跟 “[ ]” ,就可以根據(jù)括號(hào)中的索引值查找元素或者賦值。在Java中數(shù)組下標(biāo)索引是從0開始的,所以,最后一個(gè)元素下標(biāo)索引是數(shù)組長(zhǎng)度減1。下面來看看基本使用方法(取出和賦值)。

public class Main {

public static void main(String[] args) {

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

int number1 = arr[0];

int number2 = arr[1];

System.out.println(number1);//將輸出1

System.out.println(number2);//將輸出2

arr[0] = 100;

System.out.println(arr[0]);//將輸出100

}

}

以上都是操作數(shù)組的正常方式,從1 - 10共有10個(gè)元素,但是如果我們?nèi)〉?1個(gè)會(huì)發(fā)生什么呢?

public class Main {

public static void main(String[] args) {

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

int number1 = arr[11];

}

}

報(bào)異常了,數(shù)組越界!

還有一種情況,如果下標(biāo)索引是負(fù)數(shù)呢?

同樣,也是異常,越界!

所以說,訪問數(shù)組下標(biāo)不能夠超出(數(shù)組長(zhǎng)度-1),且下標(biāo)索引必須大于等于0。

數(shù)組的遍歷

public class Main {

public static void main(String[] args) {

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

//可以通過數(shù)組.length拿到數(shù)組長(zhǎng)度

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

System.out.println(arr[i]);

}

}

}

數(shù)組的賦值

基本創(chuàng)建數(shù)組已經(jīng)會(huì)了,假如我只給數(shù)組初始化長(zhǎng)度,不給賦值會(huì)輸出什么呢?下面來看看效果:

用int類型來試試

public class Main {

public static void main(String[] args) {

int[] arr = new int[10];

//可以通過數(shù)組.length拿到數(shù)組長(zhǎng)度

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

System.out.println(arr[i]);

}

}

}

結(jié)果默認(rèn)值全是0

如果是String類型呢?

public class Main {

public static void main(String[] args) {

String[] arr = new String[10];

//可以通過數(shù)組.length拿到數(shù)組長(zhǎng)度

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

System.out.println(arr[i]);

}

}

}

結(jié)果全是null(為空)

可見,只要符合創(chuàng)建數(shù)組,不賦值的情況下,數(shù)組會(huì)自動(dòng)分配默認(rèn)值。

數(shù)組的深入理解

數(shù)組是一種引用數(shù)據(jù)類型,數(shù)組引用變量只是一個(gè)引用,數(shù)組元素和數(shù)組變量在內(nèi)存中是分開來存放的。

內(nèi)存中的數(shù)組鄭州婦科在線醫(yī)生 http://www.zzkdfk120.com/

數(shù)組引用變量只是一個(gè)引用,引用變量可以指向任何有效的內(nèi)存,只有當(dāng)前引用指向有效的內(nèi)存中,才能通過該數(shù)組變量來訪問數(shù)組元素。

實(shí)際的數(shù)組對(duì)象被存在堆內(nèi)存中,如果引用該數(shù)組對(duì)象的數(shù)組引用變量是一個(gè)局部變量,那么它被存放在棧內(nèi)存中。

如果堆內(nèi)存中不再有任何變量引用自己,則這個(gè)數(shù)組將成為垃圾,該數(shù)組所占的內(nèi)存將會(huì)被垃圾回收機(jī)制回收。

多維數(shù)組

多維數(shù)組,顧名思義,就是有多個(gè)維度的數(shù)組(只是先這么理解,其實(shí)是不存在的),比如初始化一個(gè)數(shù)組,像以上初始化,那么都是一維數(shù)組,下面來定義一個(gè)二維數(shù)組:

這代表了5行5列的數(shù)組:

public class Main {

public static void main(String[] args) {

int[][] arr = new int[5][5];

}

}

我們來進(jìn)行初始化:

public class Main {

public static void main(String[] args) {

int[][] arr = new int[][]{

{1, 2, 3, 4, 5},

{1, 2, 3, 4, 5},

{1, 2, 3, 4, 5},

{1, 2, 3, 4, 5},

{1, 2, 3, 4, 5}

};

}

}

同樣,引用下標(biāo)也是如此,比如說引用第二行,第三列的的一個(gè)元素:

public class Main {

public static void main(String[] args) {

int[][] arr = new int[][]{

{1, 2, 3, 4, 5},

{1, 2, 3, 4, 5},

{1, 2, 3, 4, 5},

{1, 2, 3, 4, 5},

{1, 2, 3, 4, 5}

};

int number = arr[1][2];

System.out.println(number);

}

}

同理,我也可以定義一個(gè)三維數(shù)組:

public class Main {

public static void main(String[] args) {

int[][][] arr = new int[][][]{

{

{1, 2, 3, 4, 5, 6},

{1, 2, 3, 4, 5, 6},

{1, 2, 3, 4, 5, 6}

}, {

{1, 2, 3, 4, 5, 6},

{1, 2, 3, 4, 5, 6},

{1, 2, 3, 4, 5, 6}

}, {

{1, 2, 3, 4, 5, 6},

{1, 2, 3, 4, 5, 6},

{1, 2, 3, 4, 5, 6}

}, {

{1, 2, 3, 4, 5, 6},

{1, 2, 3, 4, 5, 6},

{1, 2, 3, 4, 5, 6}

}

};

int number = arr[1][2][3];

System.out.println(number);

}

}

增強(qiáng)工具類 Arrays

Arrays包含了很多靜態(tài)方法,都寫在了注釋中,不做再詳細(xì)的解釋:(注釋已經(jīng)夠詳細(xì)了,實(shí)在沒辦法解釋)

import java.util.Arrays;

public class Main {

public static void main(String[] args) {

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

//使用二分查找查詢key元素在arr數(shù)組中出現(xiàn)的索引,如果arr數(shù)組中不包括key元素的值,則返回負(fù)數(shù)。

//要求:該數(shù)組元素已經(jīng)升序排列。

int i = Arrays.binarySearch(arr, 3);

System.out.println(i);//輸出2

//與第一種類似,但是只搜索2 - 6 索引的值。同理,要求已經(jīng)升序排列。

int i2 = Arrays.binarySearch(arr, 2, 6, 3);

System.out.println(i2);//輸出2

//根據(jù)arr數(shù)組復(fù)制出來一個(gè)新數(shù)組,15代表的是復(fù)制出來新數(shù)組的長(zhǎng)度,arr長(zhǎng)度為9,但是這里大于就,則會(huì)往數(shù)組中添加默認(rèn)值,湊夠15為止。

int[] ints = Arrays.copyOf(arr, 15);

//也是復(fù)制數(shù)組,但是只會(huì)復(fù)制從索引2到索引5的元素

int[] ints2 = Arrays.copyOfRange(arr, 2, 5);

//將所有數(shù)組元素都賦值為0,無返回值

Arrays.fill(arr, 0);

//將下標(biāo)索引2-5元素賦值為0

Arrays.fill(arr, 2, 5, 0);

//將數(shù)組排序,無返回值

Arrays.sort(arr);

//只會(huì)排序下標(biāo)2到5的元素,無返回值

Arrays.sort(arr, 2, 5);

//將數(shù)組轉(zhuǎn)化為String字符串

String s = Arrays.toString(arr);

}

}

網(wǎng)頁(yè)標(biāo)題:Java之:數(shù)組類型
新聞來源:http://muchs.cn/article2/jehsic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、小程序開發(fā)、定制開發(fā)標(biāo)簽優(yōu)化、網(wǎng)站改版、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)