国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java基礎之數組超詳細知識總結

發(fā)布時(shí)間:2021-07-17 21:51 來(lái)源:腳本之家 閱讀:0 作者:一直小菜雞~ 欄目: 編程語(yǔ)言 歡迎投稿:712375056

目錄

一、一維數組

1、Java語(yǔ)言中的數組是一種 引用數據類(lèi)型。不屬于基本數據類(lèi)型。數組的父類(lèi)Object。

2、數組實(shí)際上是一個(gè)容器,可以同時(shí)容納多個(gè)元素。(數組是一個(gè)數據的集合

3、數組當中可以存儲“基本數據類(lèi)型”的數據,也可以存儲“引用數據類(lèi)型”的數據。

4、數組因為是引用類(lèi)型,所以數組對象存儲在 堆內存 當中。(數組是存儲在當中的)

5、數組當中如果存儲的是“java對象”的話(huà),實(shí)際上存儲的是對象的“引用(內存地址)”,數組中不能直接存儲java對象。

6、數組一旦創(chuàng )建,在java中規定,長(cháng)度不可變。(數組長(cháng)度不可變

7、數組的分類(lèi):一維數組、二維數組、三維數組、多維數組…(一維數組較多,二維數組偶爾使用?。?/p>

8、所有的數組對象都有 length 屬性(java自帶的),用來(lái)獲取數組中元素的個(gè)數。

9、java中的數組要求數組中元素的 類(lèi)型統一。

比如:int類(lèi)型數組只能存儲int類(lèi)型,Person類(lèi)型數組只能存儲Person類(lèi)型。

10、數組在內存方面存儲的時(shí)候,數組中的元素內存地址(存儲的每一個(gè)元素都是有規則的挨著(zhù)排列的)是連續的。內存地址連續。(數組特點(diǎn))

11、所有的數組都是拿“第一個(gè)小方框的內存地址”作為整個(gè)數組對象的內存地址。
(數組中首元素的內存地址作為整個(gè)數組對象的內存地址。)

12、數組中每一個(gè)元素都是有下標的,下標從0開(kāi)始,以1遞增。最后一個(gè)元素的下標是:length - 1

13、數組這種數據結構的優(yōu)點(diǎn)和缺點(diǎn)是什么?

  • 優(yōu)點(diǎn)查詢(xún)/查找/檢索某個(gè)下標上的元素時(shí)效率極高。

原因:

第一:每一個(gè)元素的內存地址在空間存儲上是連續的。

第二:每一個(gè)元素類(lèi)型相同,所以占用空間大小一樣。

第三:知道第一個(gè)元素內存地址,知道每一個(gè)元素占用空間的大小,又知道下標,所以通過(guò)一個(gè)數學(xué)表達式就可以計算出某個(gè)下標上元素的內存地址。直接通過(guò)內存地址定位元素,所以數組的檢索效率是最高的。

注意:

數組中存儲100個(gè)元素,或者存儲100萬(wàn)個(gè)元素,在元素查詢(xún)/檢索方面,效率是相同的,
因為數組中元素查找的時(shí)候不會(huì )一個(gè)一個(gè)找,是通過(guò)數學(xué)表達式計算出來(lái)的。(算出一個(gè)
內存地址,直接定位的。)

  • 缺點(diǎn)

第一:由于為了保證數組中每個(gè)元素的內存地址連續,所以在數組上隨機刪除或者增加元素的時(shí)候,效率較低,因為隨機增刪元素會(huì )涉及到后面元素統一向前或者向后位移的操作。

第二:數組不能存儲大數據量。因為很難在內存空間上找到一塊特別大的連續的內存空間。

注意:

對于數組中最后一個(gè)元素的增刪,是沒(méi)有效率影響的。

14、怎么聲明/定義一個(gè)一維數組?

語(yǔ)法格式:

int[] array1;
double[] array2;
boolean[] array3;
String[] array4;
Object[] array5;

15、怎么初始化一個(gè)一維數組呢?

包括兩種方式:靜態(tài)初始 化一維數組,動(dòng)態(tài)初始化 一維數組。

靜態(tài)初始化語(yǔ)法格式:

java風(fēng)格:

int[] array = {100, 2100, 300, 55};

C++風(fēng)格:

int array[] = {100, 2100, 300, 55};

動(dòng)態(tài)初始化語(yǔ)法格式:

Java風(fēng)格:

int[] array = new int[5]; // 這里的5表示數組的元素個(gè)數。
// 初始化一個(gè)5個(gè)長(cháng)度的int類(lèi)型數組,每個(gè)元素默認值0
String[] names = new String[6]; // 初始化6個(gè)長(cháng)度的String類(lèi)型數組,每個(gè)元素默認值null。

C++風(fēng)格:

int array[] = new int[5]; // 這里的5表示數組的元素個(gè)數。
// 初始化一個(gè)5個(gè)長(cháng)度的int類(lèi)型數組,每個(gè)元素默認值0
String names[] = new String[6]; // 初始化6個(gè)長(cháng)度的String類(lèi)型數組,每個(gè)元素默認值null。

注意:

采用動(dòng)態(tài)初始化,數組會(huì )賦默認值!

注意:
和c++的區別

c++定義數組

//靜態(tài)初始化
int a[10];
int a[] = {1, 2, 3, 4};
int a[100] = {1, 2, 3, 4};

//動(dòng)態(tài)初始化
int *a = new int[10];

16、怎么修改一維數組某一個(gè)元素的值?

語(yǔ)法格式:

數組名[下標] = 值;

eg.
a[1] = 100;

17、 什么時(shí)候采用靜態(tài)初始化方式,什么時(shí)候使用動(dòng)態(tài)初始化方式呢?

  • 當你創(chuàng )建數組的時(shí)候,確定數組中存儲哪些具體的元素時(shí),采用靜態(tài)初始化方式。
  • 當你創(chuàng )建數組的時(shí)候,不確定將來(lái)數組中存儲哪些數據,你可以采用動(dòng)態(tài)初始化的方式,預先分配內存空間。

18、方法形參為一維數組如何傳參?

public void print(int[] num){
	for (int i = 0; i < num.length; i++){
		System.out.println(num[i]);
	}
}

傳參:
int[] a = {1, 2, 3, 4};
print(a);

還可以這樣傳參:

傳靜態(tài)數組
print(new int[]{1, 2, 3, 4});

new int[]{1, 2, 3, 4}還可以.length是一個(gè)數組對象!

19、數組擴容(效率低)

方法:(System類(lèi)的方法)

/**
*@src	拷貝源
*@srcPos	拷貝源起始位置
*@dest	目標數組
*@destPos	目標數組起始位置
*@length	拷貝長(cháng)度
*/
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

eg.

int[] a = {1, 2, 3, 4};
int[] b = new int [10];
System.arraycopy(a, 0, b, 0, aa.length);
//從a數組下標為0開(kāi)始拷貝,拷貝到從b數組下標為0開(kāi)始存入,長(cháng)度為整個(gè)a數組

二、二維數組

1、二維數組其實(shí)是一個(gè) 特殊的一維數組,特殊在這個(gè)一維數組當中的每一個(gè)元素是一個(gè)一維數組。

2、三維數組是什么?

三維數組是一個(gè)特殊的二維數組,特殊在這個(gè)二維數組 中每一個(gè)元素是一個(gè)一維數組。

實(shí)際的開(kāi)發(fā)中使用最多的就是一維數組。二維數組也很少使用。三維數組幾乎不用。

3、二維數組靜態(tài)初始化

int[][] array = {
        {1,1,1},
        {2,3,4,5},
        {0,0,0,0},
        {2,3,4,5},
        {2,3,4,5},
        {2,3,4,5},
        {2,3,4,5}
};

4、二維數組動(dòng)態(tài)初始化

eg.

int[][] array = new int[3][4];

5、關(guān)于二維數組中元素的:讀和改。

a[二維數組中的一維數組的下標][一維數組的下標]

a[0][0]:表示第1個(gè)一維數組中的第1個(gè)元素。

a[3][100]:表示第4個(gè)一維數組中的第101個(gè)元素。

注意:

對于a[3][100]來(lái)說(shuō),其中 a[3] 是一個(gè)整體。[100]是前面a[3]執行結束的結果然后再下標100。

6、方法形參為二維數組如何傳參?

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

傳參:
 int[][] a = {{1,2,3,4},{4,5,6,76},{1,23,4}};
print(a);

還可以這樣傳參:

傳靜態(tài)數組
print(new int[][]{{1,2,3,4},{4,5,6,76},{1,23,4}});

new int[][]{{1,2,3,4},{4,5,6,76},{1,23,4}}還可以.length是一個(gè)數組對象!

三、總結

1. 數組的優(yōu)點(diǎn)和缺點(diǎn),并且要理解為什么。

第一:空間存儲上,內存地址是連續的。

第二:每個(gè)元素占用的空間大小相同。

第三:知道首元素的內存地址。

第四:通過(guò)下標可以計算出偏移量。
通過(guò)一個(gè)數學(xué)表達式,就可以快速計算出某個(gè)下標位置上元素的內存地址,
直接通過(guò)內存地址定位,效率非常高。

優(yōu)點(diǎn):檢索效率高。
缺點(diǎn):隨機增刪效率較低,數組無(wú)法存儲大數據量。
注意:數組最后一個(gè)元素的增刪效率不受影響。

2. 一維數組的靜態(tài)初始化和動(dòng)態(tài)初始化

靜態(tài)初始化:

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

Object[] objs = {new Object(), new Object(), new Object()};

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

int[] arr = new int[4]; // 4個(gè)長(cháng)度,每個(gè)元素默認值0

Object[] objs = new Object[4]; // 4個(gè)長(cháng)度,每個(gè)元素默認值null

3. 一維數組的遍歷

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

4. 二維數組的靜態(tài)初始化和動(dòng)態(tài)初始化

靜態(tài)初始化:

int[][] arr = {
		{1,2,34},
		{54,4,34,3},
		{2,34,4,5}
};

Object[][] arr = {
		{new Object(),new Object()},
		{new Object(),new Object()},
		{new Object(),new Object(),new Object()}
};

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

int[][] arr = new int[3][4];

Object[][] arr = new Object[4][4];

Animal[][] arr = new Animal[3][4];

// Person類(lèi)型數組,里面可以存儲Person類(lèi)型對象,以及Person類(lèi)型的子類(lèi)型都可以。
Person[][] arr = new Person[2][2];
....

5. 二維數組的遍歷

for(int i = 0; i < arr.length; i++){ // 外層for循環(huán)負責遍歷外面的一維數組。
	// 里面這個(gè)for循環(huán)負責遍歷二維數組里面的一維數組。
	for(int j = 0; j < arr[i].length; j++){
		System.out.print(arr[i][j]);
	}
	// 換行。
	System.out.println();
}

6. 數組的拷貝:System.arraycopy()方法的使用

數組有一個(gè)特點(diǎn):長(cháng)度一旦確定,不可變。

所以數組長(cháng)度不夠的時(shí)候,需要擴容,擴容的機制是:新建一個(gè)大數組,將小數組中的數據拷貝到大數組,然后小數組對象被垃圾回收。

補充:

數組長(cháng)度為0:

int[] f = {};//數組長(cháng)度為0
System.out.println(f.length);//0

int[] g = new int[0];//數組長(cháng)度為0
System.out.println(g.length);//0

int[] h = null;
//System.out.println(h.length);//空指針異常

到此這篇關(guān)于Java基礎之數組詳解的文章就介紹到這了,更多相關(guān)Java數組內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

欧美RAPPER潮水抽筋| 亚洲无线码在线一区观看| 国产9色在线 | 日韩| 欧美老熟妇牲交| 国产无套粉嫩白浆在线| 亚洲精品乱码久久久久久蜜桃图片|