99久久精品国产片-99久久精品国产免费-99久久精品国产麻豆-99久久精品国产国产毛片-99久久精品国产高清一区二区-99久久精品费精品国产一区二区

400-609-4309

java中數(shù)組的概念-java中數(shù)組的特點(diǎn)

java中數(shù)組的概念

java中數(shù)組的概念-java中數(shù)組的特點(diǎn)

剛學(xué)Java的時(shí)候,你是不是也有過(guò)這樣的困惑:“數(shù)組到底是個(gè)啥?為啥老師總說(shuō)它是基礎(chǔ)中的基礎(chǔ)?” 其實(shí)啊,數(shù)組就像咱們編程路上的“第一個(gè)工具箱”,不管是處理數(shù)據(jù)、刷題還是做項(xiàng)目,幾乎處處都能見到它的影子。但很多人學(xué)的時(shí)候只記了“數(shù)組是存數(shù)據(jù)的”,卻沒(méi)搞懂它的“脾氣”,結(jié)果寫代碼時(shí)不是越界就是賦值出錯(cuò)。今天這篇文章,咱們就掰開揉碎了聊——從數(shù)組到底是個(gè)啥,到它有哪些“必須知道”的特點(diǎn),再到怎么避開初學(xué)者常踩的坑,保證你看完就能上手用,再也不迷糊!

一、Java數(shù)組:到底是個(gè)啥?—— 從“貨架”理解數(shù)組概念

先問(wèn)個(gè)問(wèn)題:如果你要在程序里存5個(gè)學(xué)生的成績(jī),總不能聲明5個(gè)變量吧?int score1=90; int score2=85; ... 這要是存100個(gè)成績(jī),手不得敲斷?這時(shí)候,數(shù)組就派上用場(chǎng)了。

簡(jiǎn)單說(shuō),Java數(shù)組就是“相同數(shù)據(jù)類型的數(shù)據(jù)集合”,可以把它想象成超市里的“貨架”:每個(gè)貨架格子(數(shù)組元素)放的都是同一種商品(相同數(shù)據(jù)類型),每個(gè)格子有自己的編號(hào)(索引),你通過(guò)編號(hào)就能快速找到對(duì)應(yīng)的商品(訪問(wèn)元素)。

比如存5個(gè)成績(jī),用數(shù)組一句話搞定:int[] scores = {90, 85, 95, 80, 100}; 這里的scores就是數(shù)組名,{}里的是具體成績(jī)(元素),int[]表示數(shù)組里的元素都是int類型。

1.1 數(shù)組的“三要素”:元素、索引、長(zhǎng)度

想徹底搞懂?dāng)?shù)組,得先記住它的“三要素”:

元素:數(shù)組里存的具體數(shù)據(jù),比如上面例子里的90、85就是元素,所有元素必須是同一種數(shù)據(jù)類型(int、String、自定義對(duì)象等)。

索引:每個(gè)元素的“編號(hào)”,用來(lái)定位元素。注意!Java數(shù)組的索引從0開始(不是1!不是1!不是1!重要的事說(shuō)三遍),所以第一個(gè)元素的索引是0,第二個(gè)是1,以此類推。

長(zhǎng)度:數(shù)組能存多少個(gè)元素,一旦創(chuàng)建就固定不變。比如上面的scores數(shù)組有5個(gè)元素,長(zhǎng)度就是5,通過(guò)scores.length就能獲取(后面會(huì)詳細(xì)說(shuō))。

1.2 怎么創(chuàng)建數(shù)組?—— 兩種常用方式

創(chuàng)建數(shù)組就像“搭貨架”,得先確定“放什么類型的商品”(數(shù)據(jù)類型)和“有多少格子”(長(zhǎng)度)。Java里常用兩種創(chuàng)建方式:

方式1:靜態(tài)初始化(知道具體元素時(shí)用)

直接列出所有元素,系統(tǒng)會(huì)自動(dòng)計(jì)算長(zhǎng)度。比如存3個(gè)字符串:

java

// 格式:數(shù)據(jù)類型[] 數(shù)組名 = {元素1, 元素2, ...};

String[] names = {"張三", "李四", "王五"};

這種方式簡(jiǎn)單直接,適合元素少、已知的場(chǎng)景。

方式2:動(dòng)態(tài)初始化(不知道具體元素時(shí)用)

先指定數(shù)組長(zhǎng)度,元素暫時(shí)為空(會(huì)有默認(rèn)值,比如int默認(rèn)0,String默認(rèn)null),后面再賦值。比如創(chuàng)建一個(gè)能存5個(gè)int的數(shù)組:

java

// 格式:數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[長(zhǎng)度];

int[] ages = new int[5];

// 后續(xù)賦值(通過(guò)索引)

ages[0] = 20; // 第一個(gè)元素賦值20

ages[1] = 22; // 第二個(gè)元素賦值22

// ...以此類推

我剛開始學(xué)的時(shí)候,總搞混這兩種方式,比如寫成int[] arr = new int[3]{1,2,3};——這是錯(cuò)的!靜態(tài)初始化不能寫長(zhǎng)度,動(dòng)態(tài)初始化不能直接寫元素,記住“要么給元素,要么給長(zhǎng)度,別貪心”。

二、Java數(shù)組的5大核心特點(diǎn):這些“脾氣”你必須摸透

數(shù)組看著簡(jiǎn)單,但它的“脾氣”(特點(diǎn))直接決定了怎么用它、什么時(shí)候用它。搞懂這些特點(diǎn),才能避開坑,寫出高效代碼。

特點(diǎn)1:長(zhǎng)度一旦確定,就像定了型的模具——不可變的“容量”

這是數(shù)組最“倔強(qiáng)”的特點(diǎn):數(shù)組一旦創(chuàng)建,長(zhǎng)度就不能改了。就像你用模具做蛋糕,模具多大,蛋糕就多大,想多裝一塊都不行。

比如你創(chuàng)建了一個(gè)長(zhǎng)度為3的數(shù)組:

java

int[] arr = new int[3];

arr[0] = 1;

arr[1] = 2;

arr[2] = 3;

// 想加第四個(gè)元素?報(bào)錯(cuò)!

arr[3] = 4; // 編譯通過(guò),但運(yùn)行時(shí)會(huì)拋 ArrayIndexOutOfBoundsException(數(shù)組越界異常)

為啥會(huì)越界?因?yàn)閿?shù)組長(zhǎng)度是3,索引只能是0、1、2,3已經(jīng)超過(guò)最大索引(長(zhǎng)度-1)了。這是初學(xué)者最常踩的坑,我當(dāng)年寫循環(huán)遍歷數(shù)組時(shí),經(jīng)常把i < arr.length寫成i <= arr.length,結(jié)果每次運(yùn)行都報(bào)錯(cuò),后來(lái)特意在筆記本上寫了“索引最大是 length-1!”才記住。

怎么避免越界? 遍歷數(shù)組時(shí),用數(shù)組名.length獲取長(zhǎng)度,循環(huán)條件寫i < 數(shù)組名.length(比如for(int i=0; i

特點(diǎn)2:元素必須“同款”,就像集裝箱只裝一類貨——相同數(shù)據(jù)類型

數(shù)組就像物流公司的“集裝箱”,要么全裝衣服,要么全裝電子產(chǎn)品,不能混裝不同類型的數(shù)據(jù)。比如你不能在int數(shù)組里存字符串:

java

int[] arr = {1, 2, "3"}; // 編譯報(bào)錯(cuò)!"3"是String類型,和int不匹配

不過(guò)有個(gè)例外:如果數(shù)組類型是“父類”,可以存“子類對(duì)象”。比如Object[]數(shù)組(Object是所有類的父類),可以存String、Integer等:

java

Object[] objArr = {"張三", 20, true}; // 可以,因?yàn)镾tring、Integer、Boolean都是Object的子類

但平時(shí)開發(fā)很少這么用,畢竟數(shù)組的優(yōu)勢(shì)就是“類型統(tǒng)一,操作高效”,混裝反而麻煩。

特點(diǎn)3:內(nèi)存里“挨家挨戶”住,就像排隊(duì)占位——連續(xù)的內(nèi)存空間

數(shù)組在內(nèi)存中是“連續(xù)存儲(chǔ)”的,元素之間緊挨著,沒(méi)有空隙。這就像排隊(duì)買奶茶,每個(gè)人(元素)緊挨著站,前后位置固定。

這種“連續(xù)存儲(chǔ)”有啥好處?訪問(wèn)速度快! 因?yàn)閿?shù)組的每個(gè)元素地址可以通過(guò)“首地址 + 索引×元素大小”直接計(jì)算出來(lái),不用一個(gè)個(gè)找。比如int類型占4個(gè)字節(jié),如果數(shù)組首地址是1000,那么索引2的元素地址就是1000 + 2×4 = 1008,直接定位,時(shí)間復(fù)雜度是O(1)(瞬間找到)。

這也是為什么數(shù)組比鏈表(非連續(xù)存儲(chǔ))訪問(wèn)快,但插入刪除慢——你想想,排隊(duì)時(shí)中間加個(gè)人,后面的人都得往后挪,多費(fèi)勁!

特點(diǎn)4:數(shù)組變量是“遙控器”,真正的數(shù)據(jù)在“堆”里——引用類型

Java里的數(shù)據(jù)類型分兩種:基本類型(int、double等)和引用類型(類、接口、數(shù)組等)。數(shù)組屬于引用類型,這意味著數(shù)組變量(比如int[] arr)存的不是數(shù)據(jù)本身,而是數(shù)組在“堆內(nèi)存”中的地址(就像遙控器,按一下就能找到真正的電視)。

舉個(gè)例子:

java

int[] arr1 = {1, 2, 3};

int[] arr2 = arr1; // arr2和arr1指向同一個(gè)數(shù)組對(duì)象

arr2[0] = 100;

System.out.println(arr1[0]); // 輸出100,因?yàn)閍rr1和arr2操作的是同一個(gè)數(shù)組

這里arr1和arr2都是“遙控器”,指向堆內(nèi)存中同一個(gè)數(shù)組對(duì)象,所以改arr2的元素,arr1也會(huì)變。如果想讓arr2是新數(shù)組,得重新創(chuàng)建:int[] arr2 = Arrays.copyOf(arr1, arr1.length);(需要導(dǎo)入java.util.Arrays)。

初學(xué)者常犯的錯(cuò):把數(shù)組變量賦值給另一個(gè)變量后,以為改新變量不影響舊變量,結(jié)果發(fā)現(xiàn)數(shù)據(jù)一起變了——記住,數(shù)組是引用類型,賦值的是地址,不是數(shù)據(jù)副本!

特點(diǎn)5:遍歷元素“兩種姿勢(shì)”,普通for循環(huán)和增強(qiáng)for循環(huán)——便捷的訪問(wèn)方式

數(shù)組的元素可以通過(guò)索引一個(gè)個(gè)訪問(wèn),遍歷的時(shí)候有兩種常用方式:

方式1:普通for循環(huán)(需要索引時(shí)用)

可以通過(guò)索引操作元素(比如修改值):

java

int[] scores = {90, 85, 95};

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

System.out.println("第" + (i+1) + "個(gè)成績(jī):" + scores[i]);

scores[i] += 5; // 每個(gè)成績(jī)加5分

}

方式2:增強(qiáng)for循環(huán)(只遍歷元素,不需要索引時(shí)用)

語(yǔ)法更簡(jiǎn)潔,但拿不到索引,也不能修改元素值(基本類型時(shí)):

java

int[] scores = {90, 85, 95};

for (int score : scores) { // 把數(shù)組里的每個(gè)元素依次賦給score

System.out.println("成績(jī):" + score);

score += 5; // 這里修改的是局部變量score,數(shù)組元素不變

}

我平時(shí)寫代碼,如果只需要看元素值,就用增強(qiáng)for循環(huán)(清爽);如果要修改元素或者需要索引(比如統(tǒng)計(jì)某個(gè)位置的元素),就用普通for循環(huán)。

三、數(shù)組這么“倔”,為啥還要用它?—— 適合的場(chǎng)景才是最好的

看到這里你可能會(huì)問(wèn):“數(shù)組長(zhǎng)度固定,不能混裝類型,好像不如ArrayList(動(dòng)態(tài)數(shù)組)好用啊?” 確實(shí),ArrayList可以自動(dòng)擴(kuò)容,用起來(lái)更靈活,但數(shù)組也有它不可替代的優(yōu)勢(shì):

效率高:連續(xù)內(nèi)存+直接索引訪問(wèn),讀寫速度比ArrayList快(ArrayList底層也是數(shù)組,但有額外的擴(kuò)容、檢查等操作)。

簡(jiǎn)單直接:不需要導(dǎo)入類(ArrayList需要import java.util.ArrayList),語(yǔ)法簡(jiǎn)單,適合存固定數(shù)量、同類型的數(shù)據(jù)(比如學(xué)生成績(jī)、月份天數(shù))。

底層基礎(chǔ):很多集合類(比如ArrayList、HashMap)底層都是用數(shù)組實(shí)現(xiàn)的,學(xué)好數(shù)組才能理解這些高級(jí)工具的原理。

就像蓋房子,數(shù)組是“ bricks(磚塊)”,雖然簡(jiǎn)單,但沒(méi)有它,高樓大廈(復(fù)雜數(shù)據(jù)結(jié)構(gòu))根本建不起來(lái)。

寫在最后

Java數(shù)組,看著是個(gè)“小角色”,卻是編程路上繞不開的“基本功”。它就像咱們學(xué)數(shù)學(xué)時(shí)的“加減乘除”,簡(jiǎn)單,但處處要用;有自己的“脾氣”(固定長(zhǎng)度、相同類型),但摸透了就很好用。

記住:數(shù)組的核心是“相同類型、固定長(zhǎng)度、連續(xù)存儲(chǔ)、引用類型”,搞懂這幾點(diǎn),不管是刷題時(shí)用數(shù)組解題,還是工作中處理數(shù)據(jù),都能游刃有余。下次再寫數(shù)組代碼,試試用“貨架”的類比想想——每個(gè)格子(元素)有編號(hào)(索引),裝同一種商品(類型),容量固定(長(zhǎng)度),是不是就清晰多了?

編程嘛,就是把復(fù)雜的問(wèn)題拆成一個(gè)個(gè)簡(jiǎn)單的“小零件”,而數(shù)組,就是你工具箱里最基礎(chǔ)、也最可靠的那一個(gè)。

12 12 分享:

相關(guān)課程

發(fā)表評(píng)論

登錄后才能評(píng)論,請(qǐng)登錄后發(fā)表評(píng)論...
提交評(píng)論

最新課程

最新專題

精品视频一区二区三区| 91麻豆高清国产在线播放| 日韩一级黄色| 亚洲精品永久一区| 在线观看导航| 九九精品久久久久久久久| 精品视频免费看| 99热精品在线| 亚欧视频在线| 人人干人人草| 亚洲精品中文字幕久久久久久| 国产伦久视频免费观看 视频| 成人在激情在线视频| 亚洲精品影院| 欧美另类videosbestsex久久| 九九精品久久| 精品视频在线观看一区二区 | 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产成人啪精品视频免费软件| 精品视频在线观看视频免费视频| 国产成人欧美一区二区三区的| 国产视频一区在线| 亚洲第一色在线| 一级片片| 国产高清在线精品一区a| 亚洲第一色在线| 色综合久久手机在线| 亚欧乱色一区二区三区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 一级毛片看真人在线视频| 亚州视频一区二区| 久久福利影视| 国产精品12| 日日日夜夜操| 国产一级生活片| 久久精品大片| 日韩男人天堂| 久草免费资源| 国产欧美精品| 亚洲精品影院久久久久久| 九九精品在线播放| 精品国产香蕉伊思人在线又爽又黄| 深夜做爰性大片中文| 青青青草影院 | 日韩欧美一及在线播放| 亚洲精品影院| 日韩在线观看视频网站| 欧美大片一区| 精品视频在线看| 深夜做爰性大片中文| 日韩欧美一二三区| 欧美激情伊人| 国产不卡在线观看视频| 青青青草视频在线观看| 精品国产一区二区三区久久久狼| 久草免费在线观看| 国产成人精品影视| 欧美一级视频免费观看| 青青久久精品| 999久久66久6只有精品| 成人a级高清视频在线观看| 日韩字幕在线| 精品视频在线看| 日韩av片免费播放| 一级片片| 中文字幕Aⅴ资源网| 香蕉视频久久| 黄色免费三级| 国产激情视频在线观看| 天天做人人爱夜夜爽2020毛片| 日韩欧美一二三区| 九九精品在线播放| 久久精品免视看国产成人2021| 国产一区二区精品久久91| 国产一区精品| 一级毛片看真人在线视频| 国产原创视频在线| 国产a网| 亚洲精品影院| 亚飞与亚基在线观看| 精品国产三级a∨在线观看| 久久国产一区二区| 国产一区二区精品久久91| 四虎影视精品永久免费网站| 精品视频免费看| 国产伦精品一区二区三区无广告| 你懂的在线观看视频| 精品国产一区二区三区精东影业| 91麻豆精品国产高清在线| 精品国产一区二区三区国产馆| 欧美日本韩国| 成人免费网站视频ww| 国产成人精品综合在线| 国产高清视频免费| 日韩欧美一二三区| 日日夜夜婷婷| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日韩中文字幕在线亚洲一区| 欧美大片毛片aaa免费看| 成人免费网站久久久| 国产福利免费观看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 亚欧乱色一区二区三区| 99色视频在线观看| 999精品视频在线| 日本在线www| 日本伦理片网站| 欧美一级视频免费观看| 91麻豆精品国产自产在线观看一区| 欧美另类videosbestsex视频| 久久精品人人做人人爽97| 91麻豆国产福利精品| 可以免费看污视频的网站| 久久国产影视免费精品| 国产一区二区精品久久91| 国产一级生活片| 精品国产三级a∨在线观看| 国产成人精品在线| 日韩免费片| 国产a视频| 国产精品免费久久| 四虎精品在线观看| 国产成人精品影视| 99热热久久| 国产网站免费视频| 精品久久久久久中文字幕2017| 天天做人人爱夜夜爽2020毛片| 国产成人精品在线| 黄色福利片| 免费国产在线视频| 99色精品| 国产视频一区在线| 欧美激情一区二区三区在线| 国产国产人免费视频成69堂| 亚洲精品中文字幕久久久久久| 日本在线不卡视频| 久久国产影视免费精品| 日韩在线观看免费| 四虎影视精品永久免费网站| 精品国产一区二区三区久久久蜜臀| 国产亚洲男人的天堂在线观看| 午夜精品国产自在现线拍| 亚洲精品中文一区不卡| 日韩一级黄色片| 国产精品自拍在线| 成人在激情在线视频| 欧美日本免费| 国产高清视频免费观看| 亚洲天堂免费| 你懂的在线观看视频| 国产美女在线一区二区三区| 日韩欧美一及在线播放| 精品久久久久久中文字幕一区 | 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产91精品一区| 亚洲第一视频在线播放| 国产一区二区精品| 精品久久久久久中文| 九九精品久久| 国产亚洲精品aaa大片| 欧美a免费| 亚洲天堂一区二区三区四区| 久久99这里只有精品国产| 国产不卡福利| 一a一级片| 亚洲精品影院久久久久久| 久久国产精品自线拍免费| 美女免费黄网站| 成人免费一级纶理片| 香蕉视频一级| 精品久久久久久中文字幕2017| 国产网站在线| 日韩av成人| 九九久久99| 欧美爱色| 亚洲精品永久一区| 高清一级毛片一本到免费观看| 精品视频在线观看一区二区 | 亚洲精品影院| 亚洲爆爽| 久久久久久久久综合影视网| 日日夜人人澡人人澡人人看免| 亚洲精品影院久久久久久| 美女免费黄网站| 99热精品一区| 午夜在线亚洲| 免费一级生活片| 成人高清视频免费观看| 精品久久久久久中文字幕2017| 九九久久99综合一区二区| 久久99这里只有精品国产| 国产网站免费| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日日夜夜婷婷| 精品久久久久久中文字幕2017| 欧美一区二区三区在线观看 | 国产激情一区二区三区| 欧美激情一区二区三区在线| 91麻豆精品国产自产在线观看一区|