数组篇-其之一-数组的概念与一维数组
本文中使用到的工具是Intellij IDEA和JDK 8,需要安裝兩款工具的小伙伴請查看這兩篇教程:點(diǎn)我查看安裝JDK8教程、點(diǎn)我查看安裝Intellij IDEA教程。
假設(shè)我想在某寶上買一點(diǎn)零食(沒錯(cuò),我承認(rèn)我確實(shí)是個(gè)吃貨),經(jīng)過搜索后出現(xiàn)了如下結(jié)果,我們發(fā)現(xiàn)每一項(xiàng)都包含相同內(nèi)容:圖片、標(biāo)題、價(jià)格、購買人數(shù)、所在店鋪名稱。要想將每一個(gè)數(shù)據(jù)項(xiàng)展現(xiàn)給用戶,就需要一個(gè)特定的“容器”來存儲每一個(gè)數(shù)據(jù)項(xiàng)。
在日常生活中,"容器"通常是指一種用于裝載、儲存物質(zhì)的器具。例如:水杯可以裝水,衣柜可以裝衣物。
仿照日常生活中的“容器”的定義,我們可以給程序中的容器做個(gè)說明:多個(gè)數(shù)據(jù)項(xiàng)聚合在一起,組成了一個(gè)裝載數(shù)據(jù)的容器。這個(gè)容器對數(shù)據(jù)項(xiàng)進(jìn)行訪問、修改等操作。
接下來要講的數(shù)組就屬于容器的一種。
一、數(shù)組的概念
數(shù)組的定義:數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),它用于存儲相同類型的元素(如整數(shù)、字符串等)的有序集合。
1.1 數(shù)組相關(guān)的概念
1. 數(shù)組名:基本數(shù)據(jù)類型變量存在變量名,那么數(shù)組也有數(shù)組變量,數(shù)組的變量名就是這個(gè)數(shù)組的名稱。例如:numbers代表這個(gè)數(shù)組存儲的是數(shù)字。
2. 索引:數(shù)組中每一個(gè)元素都有唯一的索引(類似我們的身份證號),我們訪問數(shù)組元素的值時(shí)會用到索引。數(shù)組的索引是有序的,這樣做的好處是訪問數(shù)組的元素非常快。
3. 元素:數(shù)組元素是數(shù)組的基本組成單位,元素的數(shù)據(jù)類型決定了數(shù)組的數(shù)據(jù)類型,相反,數(shù)組的數(shù)據(jù)類型也決定了每個(gè)元素的數(shù)據(jù)類型。
4. 數(shù)組的長度:數(shù)組中存儲元素的數(shù)量。
5. 數(shù)組本身是引用數(shù)據(jù)類型。但是數(shù)組中的元素既可以是基本數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型。
6. 數(shù)組的大小是固定的,一旦創(chuàng)建,其大小就不能改變。
1.2 數(shù)組的劃分
按照數(shù)據(jù)類型劃分,數(shù)組可以分成基本類型數(shù)組、引用數(shù)據(jù)類型數(shù)組。以基本類型數(shù)組為例,每一個(gè)數(shù)組元素的數(shù)據(jù)類型都是基本數(shù)據(jù)類型。
按照維度劃分,數(shù)組可以劃分成一維數(shù)組、二維數(shù)組、三維數(shù)組……
- 一維數(shù)組中存儲一組數(shù)據(jù):
- 二維數(shù)組本質(zhì)上就是一維數(shù)組的每個(gè)元素再存儲一個(gè)數(shù)組,每個(gè)元素對應(yīng)的數(shù)組存儲元素個(gè)數(shù)可能也不盡相同(本質(zhì)上就是一維數(shù)組再嵌套一維數(shù)組):
就我個(gè)人日常開發(fā)而言,使用一維數(shù)組的次數(shù)多一些,用到二維數(shù)組的次數(shù)就幾乎很少了(在做算法題的時(shí)候能用的到)
備注:本文后續(xù)提到的數(shù)組默認(rèn)都是一維數(shù)組。
二、定義并初始化數(shù)組
2.1 定義數(shù)組變量
定義數(shù)組變量有兩種方式:
方式一:方括號寫到數(shù)據(jù)類型的后面。
// Java風(fēng)格定義數(shù)組變量
數(shù)據(jù)類型[] 變量名;
這里的數(shù)據(jù)類型既可以是基本數(shù)據(jù)類型,也可以是引用數(shù)據(jù)類型。例如,我想定義一個(gè)int類型數(shù)組arr1和String類型數(shù)組arr2,可以寫成如下形式:
// int類型數(shù)組
int[] arr1;
// 引用數(shù)據(jù)類型數(shù)組
String[] arr2;
方式二:如果你之前學(xué)過C或者C++的數(shù)組,也可以把方括號寫到變量名后面。
數(shù)據(jù)類型 變量名[];
定義數(shù)組變量完成后,就需要?jiǎng)?chuàng)建數(shù)組了。創(chuàng)建數(shù)組一共有兩種方式:靜態(tài)初始化和動態(tài)初始化。
2.2 創(chuàng)建數(shù)組方式——靜態(tài)初始化
靜態(tài)初始化:數(shù)組中存儲的內(nèi)容已經(jīng)確定,可以使用以下兩種方式靜態(tài)初始化:
數(shù)據(jù)類型[] 變量名 = new 數(shù)據(jù)類型[] {變量值1, 變量值2, 變量值3,..., 變量值n};
上述方式有簡化寫法,賦值符號右側(cè)的new 數(shù)據(jù)類型[]可以省略,只保留大括號中的內(nèi)容,寫法如下:
數(shù)據(jù)類型[] 變量名 = {變量值1, 變量值2, 變量值3,..., 變量值n};
下面代碼展示了上述兩種方式創(chuàng)建數(shù)組:
/**
* 數(shù)組靜態(tài)初始化兩種方式
*
* @author iCode504
* @date 2024-01-12
*/
public class MyArrayDemo1 {
public static void main(String[] args) {
// new 數(shù)據(jù)類型[] {...}方式初始化數(shù)組
int[] array1 = new int[]{1, 2, 3, 4, 5};
double[] array2 = new double[]{4.2, 5.6, 7.6, 2.33, 8.88};
String[] tastyFoods = new String[]{"砂鍋麻辣燙", "過橋米線", "土豆粉", "砂鍋居", "火鍋"};
// {...}方式初始化數(shù)組
float[] array3 = {2.3f, 89.66f, 34.2f, -20.33f};
long[] array4 = {666, 888, 999, 648};
String[] changchunAttractions = {"凈月潭公園", "南湖公園", "偽滿皇宮", "長影世紀(jì)城", "雕塑公園"};
}
}
注意:使用花括號
{}創(chuàng)建數(shù)組必須先定義數(shù)組變量的同時(shí)就將創(chuàng)建好的數(shù)組賦值給數(shù)組變量。先定義數(shù)組變量,再使用花括號的方式賦值是錯(cuò)誤的,無法通過編譯。以下是錯(cuò)誤寫法:
// 定義數(shù)組變量 int[] arr; // 以花括號的方式對應(yīng)的數(shù)組值賦值給變量無法通過編譯 arr = {1, 2, 3, 4, 5};在IDEA中這樣寫代碼時(shí),也會給出錯(cuò)誤提示:
2.3 創(chuàng)建數(shù)組方式——?jiǎng)討B(tài)初始化
前面講到的靜態(tài)初始化的方式創(chuàng)建數(shù)組有一個(gè)前提就是你已經(jīng)確定數(shù)組中要存儲什么。但是在大多數(shù)情況下,我們也不確定數(shù)組要存儲什么,而是在后續(xù)的時(shí)候修改數(shù)組中元素的值,這時(shí)候我們就可以使用動態(tài)初始化的方式創(chuàng)建數(shù)組。
動態(tài)初始化:數(shù)組的長度可以確定,但是數(shù)組里面具體寫什么內(nèi)容還不確定,語法格式如下:
數(shù)據(jù)類型[] 變量名 = new 數(shù)據(jù)類型[n];
其中n指的是數(shù)組的長度,即數(shù)組中存儲元素的數(shù)量。具體內(nèi)容可以看下一部分:數(shù)組的長度。
以下是動態(tài)初始化方式創(chuàng)建數(shù)組:
/**
* 動態(tài)初始化方式創(chuàng)建數(shù)組
*
* @author iCode504
* @date 2024-01-13
*/
public class MyArrayDemo2 {
public static void main(String[] args) {
// 動態(tài)初始化方式創(chuàng)建長度為4的char數(shù)組、String數(shù)組、int數(shù)組
char[] array1 = new char[4];
String[] array2 = new String[4];
int[] array3 = new int[4];
}
}
三、數(shù)組的長度
假設(shè)有一個(gè)數(shù)組arr,要想獲取數(shù)組的長度,我們只需要使用arr.length獲取數(shù)組的長度即可。
長度為0的數(shù)組稱作空數(shù)組。
定義數(shù)組時(shí),數(shù)組的長度必須是整數(shù)且大于等于0,否則系統(tǒng)會拋出數(shù)組長度為負(fù)數(shù)(NegativeArraySizeException)異常。
/**
* 數(shù)組的長度獲取
*
* @author iCode504
* @date 2023-12-21
*/
public class ArrayLength {
public static void main(String[] args) {
int[] array = {1, 3, 5, 7, 9, 11, 13};
System.out.println("array.length = " + array.length);
// 空數(shù)組的長度
int[] array1 = new int[0];
System.out.println("array1.length = " + array1.length);
int[] array2 = {};
System.out.println("array2.length = " + array2.length);
// 數(shù)組長度必須要>=0,如果定義的數(shù)組默認(rèn)長度是負(fù)數(shù)的話會拋出NegativeArraySizeException異常
int[] array3 = new int[-1];
System.out.println("array3.length = " + array3.length);
}
}
運(yùn)行結(jié)果:
四、訪問數(shù)組元素
通過數(shù)組名[索引值]可以訪問到這個(gè)索引值下的值,其中索引值必須是整數(shù)并且處于[0, 數(shù)組的長度值)范圍內(nèi),如果超出這個(gè)范圍,系統(tǒng)就會拋出數(shù)組索引越界異常ArrayIndexOutOfBoundsException。
/**
* 數(shù)組元素的訪問
*
* @author iCode504
* @date 2023-12-21
*/
public class ArrayElementsAccess {
public static void main(String[] args) {
int[] array = {1, 3, 5, 7, 9, 11, 13};
System.out.println("數(shù)組的長度是: " + array.length);
System.out.println("array[0] = " + array[0]);
System.out.println("array[3] = " + array[3]);
System.out.println("array[6] = " + array[6]);
// 超出[0, array.length)的范圍會拋出異常
System.out.println("array[7] = " + array[7]);
}
}
運(yùn)行結(jié)果:
從運(yùn)行結(jié)果不難看出,數(shù)組索引的范圍是[0, 6],一旦索引值超出這個(gè)范圍,Java會為我們拋出一個(gè)數(shù)組索引值越界異常(ArrayIndexOutOfBoundsException),這種情況在以后編寫代碼的過程中要盡量避免。
當(dāng)我們能獲取到數(shù)組元素的值時(shí),我們就可以修改數(shù)組中的元素了。
我們還是以上面的數(shù)組為例,我想修改索引值為2的元素值為88,索引值為5的元素值為66:
/**
* 數(shù)組元素的修改
*
* @author iCode504
* @date 2024-01-17
*/
public class ArrayElementsModification {
public static void main(String[] args) {
int[] array = {1, 3, 5, 7, 9, 11, 13};
System.out.println("修改前各個(gè)元素的值: ");
System.out.println("array[0] = " + array[0]);
System.out.println("array[1] = " + array[1]);
System.out.println("array[2] = " + array[2]);
System.out.println("array[3] = " + array[3]);
System.out.println("array[4] = " + array[4]);
System.out.println("array[5] = " + array[5]);
System.out.println("array[6] = " + array[6]);
// 修改索引值為2的元素為88,索引值為3的元素為66
array[2] = 88;
array[3] = 66;
System.out.println("--------------------");
System.out.println("修改后各個(gè)元素的值: ");
System.out.println("array[0] = " + array[0]);
System.out.println("array[1] = " + array[1]);
System.out.println("array[2] = " + array[2]);
System.out.println("array[3] = " + array[3]);
System.out.println("array[4] = " + array[4]);
System.out.println("array[5] = " + array[5]);
System.out.println("array[6] = " + array[6]);
}
}
運(yùn)行結(jié)果符合預(yù)期:
五、數(shù)組的特點(diǎn)
上邊講了這么多數(shù)組的用法,這一部分我們就來簡單總結(jié)以下數(shù)組的特點(diǎn)。其實(shí)這一部分我本來想放到前面來講,但是后來一想放到前面容易給初學(xué)者說的云里霧里,于是將數(shù)組的特點(diǎn)放到這一部分。數(shù)組一共有如下幾個(gè)特點(diǎn):
1. 相同數(shù)據(jù)類型: 所有數(shù)組元素必須是相同的數(shù)據(jù)類型,可以是基本數(shù)據(jù)類型(如整數(shù)、浮點(diǎn)數(shù)等)或引用數(shù)據(jù)類型(如對象、字符串等)。
例如:假設(shè)有一個(gè)長度為5的int數(shù)組,不管是靜態(tài)初始化還是動態(tài)初始化,里面存儲的都是int類型的值。
/**
* 數(shù)組特點(diǎn)1:所有數(shù)組元素都是相同類型
*
* @author iCode504
* @date 2024-01-13
*/
public class ArrayCharacteristic1 {
public static void main(String[] args) {
// 定義一個(gè)int類型的數(shù)組
int[] array = new int[5];
// 錯(cuò)誤寫法,因?yàn)閕nt[]數(shù)組所有元素必須是int類型。
// 而long和double本身就比int范圍大,不能直接賦值給數(shù)組元素。
// 如需賦值,就需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換(但是這個(gè)過程中也可能會出現(xiàn)一些問題)
long number1 = 8;
// array[2] = number1;
double number2 = 20.34;
// array[3] = number2;
// int[] array2 = {1, 2, 3, 4, 8.88};
// 正確寫法,因?yàn)閏haracter1賦值給array[4]時(shí),會將值自動類型提升為int類型
// byte、short也同理
char character1 = 'i';
array[4] = character1;
byte number3 = 30;
array[4] = number3;
short number4 = 40;
array[4] = number4;
}
}
2. 固定大小:數(shù)組在創(chuàng)建時(shí)需要指定固定的大小,這個(gè)大小通常在數(shù)組聲明時(shí)確定,且無法在運(yùn)行時(shí)改變。這意味著數(shù)組的長度是固定的,無法動態(tài)調(diào)整。
我們可以使用反證法對上述內(nèi)容進(jìn)行證明,假設(shè)數(shù)組定義了以后,可以動態(tài)調(diào)整。通過這個(gè)假設(shè),我們來編寫一段代碼證明一下上述假設(shè)是否可行:
/**
* 數(shù)組特點(diǎn)2--創(chuàng)建數(shù)組后,無法動態(tài)調(diào)整數(shù)組長度
*
* @author iCode504
* @date 2024-01-13
*/
public class ArrayCharacteristic2 {
public static void main(String[] args) {
// 定義一個(gè)長度為5的數(shù)組
int[] array = new int[5];
System.out.println("數(shù)組初始長度: " + array.length);
// 如果數(shù)組長度可以動態(tài)調(diào)整,那么我在數(shù)組范圍外再給數(shù)組元素賦值,此時(shí)數(shù)組長度會動態(tài)調(diào)整到這個(gè)范圍外的索引值
array[5] = 20;
System.out.println("給數(shù)組范圍外元素賦值后的長度: " + array.length);
}
}
在這個(gè)程序中,我們嘗試將一個(gè)元素添加到數(shù)組的第六個(gè)位置(索引為5),而此時(shí)拋出了ArrayIndexOutOfBoundsException(數(shù)組越界異常)。很顯然,上述假設(shè)并不成立。
嘗試訪問超出數(shù)組長度的索引會導(dǎo)致程序異常。
3. 連續(xù)內(nèi)存空間: 數(shù)組的元素在內(nèi)存中是連續(xù)存儲的,這也是通過索引直接訪問數(shù)組元素的原因。
4. 索引訪問: 數(shù)組中的每個(gè)元素都有一個(gè)唯一的索引,通過該索引可以訪問或修改對應(yīng)位置的元素。數(shù)組的索引從0開始。
這一點(diǎn)我們在第四部分?jǐn)?shù)組元素的訪問已經(jīng)提到,創(chuàng)建指定長度的數(shù)組時(shí),會為每一個(gè)數(shù)組元素分配一個(gè)索引值(從0到arr.length - 1且都是整數(shù))。要想訪問到數(shù)組元素值,必須通過數(shù)組名[索引值]訪問每一個(gè)數(shù)組元素。
六、遍歷數(shù)組
使用循環(huán)來遍歷數(shù)組可以獲取到數(shù)組的每一個(gè)元素。遍歷數(shù)組有兩種方式:普通循環(huán)遍歷和foreach循環(huán)(也稱作增強(qiáng)for循環(huán))遍歷。
6.1 普通循環(huán)遍歷
我們可以使用數(shù)組的索引值,通過循環(huán)來遍歷數(shù)組,這里我使用普通的for循環(huán)來遍歷一個(gè)String類型的數(shù)組(當(dāng)然,使用while和do-while循環(huán)也OK):
/**
* 普通循環(huán)遍歷數(shù)組
*
* @author iCode504
* @date 2023-12-21
*/
public class ForArray {
public static void main(String[] args) {
String[] array = {"劉備", "關(guān)羽", "張飛", "諸葛亮", "趙云"};
// 遍歷范圍:[0, array.length)
for (int i = 0; i < array.length; i++) {
// 用數(shù)組名和索引值訪問到這個(gè)元素的值
System.out.println(array[i]);
}
}
}
運(yùn)行結(jié)果:
在IDEA中,我們可以使用數(shù)組名.fori快速生成一個(gè)for循環(huán):
同理,如果想逆序輸出數(shù)組,可以使用數(shù)組名.forr:
6.2 foreach循環(huán)遍歷
foreach循環(huán)是JDK 5的新特性,它也是一種循環(huán)結(jié)構(gòu),這個(gè)循環(huán)主要用于遍歷數(shù)組和集合(集合后續(xù)會學(xué)習(xí)到),也稱作增強(qiáng)for循環(huán)。
說明:在JDK 8中,在迭代器
Iterator<T>接口添加了默認(rèn)方法foreach()專門用來遍歷集合,后續(xù)會在集合部分講到。
foreach循環(huán)的語法結(jié)構(gòu)如下所示:
for (數(shù)據(jù)類型 變量名 : 數(shù)組/集合名) {
// 執(zhí)行代碼...
}
在這個(gè)語法結(jié)構(gòu)中,如果我們使用的是數(shù)組arr,那么結(jié)構(gòu)中的變量名就相當(dāng)于數(shù)組中每一個(gè)元素對應(yīng)的變量名稱,即arr[i]。
例如:假設(shè)要使用foreach循環(huán)遍歷一個(gè)String類型的數(shù)組,使用方式和普通循環(huán)遍歷語法要簡單一些。
/**
* foreach循環(huán)遍歷數(shù)組
*
* @author iCode504
* @date 2023-12-21
*/
public class ForeachArray {
public static void main(String[] args) {
String[] array = {"劉備", "關(guān)羽", "張飛", "諸葛亮", "趙云"};
// foreach循環(huán)遍歷數(shù)組
for (String s : array) {
System.out.println(s);
}
}
}
運(yùn)行結(jié)果:
在IDEA中也為我們設(shè)置了快捷生成foreach循環(huán)的快捷鍵數(shù)組名.for,就能快速生成一個(gè)foreach循環(huán):
七、數(shù)組元素的默認(rèn)值
整數(shù)類型(byte、short、int、long)的數(shù)組初始化時(shí),每一個(gè)數(shù)組元素的默認(rèn)值是0。
/**
* 基本數(shù)據(jù)類型--整數(shù)類型數(shù)組元素的默認(rèn)值
*
* @author iCode504
* @date 2023-12-21
*/
public class ArrayElementsDefaultValue1 {
public static void main(String[] args) {
// 基本數(shù)據(jù)類型--byte類型數(shù)組元素的默認(rèn)值
byte[] byteArray = new byte[5];
System.out.println("byte[]元素的默認(rèn)值是: ");
for (byte b : byteArray) {
System.out.print(b + "\t");
}
System.out.println();
// 基本數(shù)據(jù)類型--short類型數(shù)組元素的默認(rèn)值
short[] shortArray = new short[5];
System.out.println("short[]元素的默認(rèn)值是: ");
for (short s : shortArray) {
System.out.print(s + "\t");
}
System.out.println();
// 基本數(shù)據(jù)類型--int類型數(shù)組元素的默認(rèn)值
int[] intArray = new int[5];
System.out.println("int[]元素的默認(rèn)值是: ");
for (int i : intArray) {
System.out.print(i + "\t");
}
System.out.println();
// 基本數(shù)據(jù)類型--long類型數(shù)組元素的默認(rèn)值
long[] longArray = new long[5];
System.out.println("long[]元素的默認(rèn)值是: ");
for (long l : longArray) {
System.out.print(l + "\t");
}
System.out.println();
}
}
運(yùn)行結(jié)果:
浮點(diǎn)類型(float、double)的數(shù)組初始化,每一個(gè)數(shù)組元素的默認(rèn)值是0.0。
/**
* 基本數(shù)據(jù)類型--浮點(diǎn)類型數(shù)組元素的默認(rèn)值
*
* @author iCode504
* @date 2023-12-21
*/
public class ArrayElementsDefaultValue2 {
public static void main(String[] args) {
// 基本數(shù)據(jù)類型--float類型數(shù)組元素的默認(rèn)值
float[] floatArray = new float[5];
System.out.println("float[]元素的默認(rèn)值是: ");
for (float f : floatArray) {
System.out.print(f + "\t");
}
System.out.println();
// 基本數(shù)據(jù)類型--double類型數(shù)組元素的默認(rèn)值
double[] doubleArray = new double[5];
System.out.println("double[]元素的默認(rèn)值是: ");
for (double d : doubleArray) {
System.out.print(d + "\t");
}
System.out.println();
}
}
字符類型(char)的數(shù)組初始化時(shí),每一個(gè)數(shù)組元素的默認(rèn)值是\u0000(即Unicode字符表的第一個(gè)字符)。
布爾類型(boolean)的數(shù)組初始化時(shí),每一個(gè)數(shù)組元素的默認(rèn)值是false。
/**
* 基本數(shù)據(jù)類型--字符類型和布爾類型數(shù)組的默認(rèn)值
*
* @author iCode504
* @date 2023-12-21
*/
public class ArrayElementsDefaultValue3 {
public static void main(String[] args) {
char[] charArray = new char[5];
System.out.println("char[]元素的默認(rèn)值是: ");
for (char c : charArray) {
// 間接驗(yàn)證每一個(gè)char數(shù)組元素默認(rèn)值是否是Unicode字符表的第一個(gè)元素
System.out.print((c == 0) + "\t");
// 寫成下面的形式驗(yàn)證也OK
// System.out.print((c == '\u0000') + "\t");
}
System.out.println();
// 基本數(shù)據(jù)類型--boolean類型數(shù)組元素的默認(rèn)值
boolean[] booleanArray = new boolean[5];
System.out.println("boolean[]元素的默認(rèn)值是: ");
for (boolean b : booleanArray) {
System.out.print(b + "\t");
}
System.out.println();
}
}
運(yùn)行結(jié)果:
引用數(shù)據(jù)類型的數(shù)組初始化時(shí),每一個(gè)數(shù)組元素的默認(rèn)值是null。
import java.util.Random;
/**
* 引用數(shù)據(jù)類型數(shù)組的默認(rèn)值
*
* @author iCode504
* @date 2023-12-21
*/
public class ArrayElementsDefaultValue4 {
public static void main(String[] args) {
// 引用數(shù)據(jù)類型數(shù)組元素的默認(rèn)值
String[] strArray = new String[5];
System.out.println("String[]元素的默認(rèn)值是: ");
for (String s : strArray) {
System.out.print(s + "\t");
}
System.out.println();
Random[] randomArray = new Random[5];
System.out.println("Random[]元素的默認(rèn)值是: ");
for (Random random : randomArray) {
System.out.print(random + "\t");
}
}
}
運(yùn)行結(jié)果:
八、知識點(diǎn)總結(jié)
數(shù)組的概念與一維數(shù)組知識點(diǎn)總結(jié)如下圖所示:
如需高清大圖,請點(diǎn)擊右側(cè)鏈接下載:點(diǎn)我下載
總結(jié)
以上是生活随笔為你收集整理的数组篇-其之一-数组的概念与一维数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flink DataStream API
- 下一篇: Flask的简单学习