亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java中為何要使用ArrayList

瀏覽:15日期:2022-08-25 13:42:05

前言

當(dāng)我們用于獲取一組數(shù)據(jù)的時(shí)候,我們總是通過(guò)下面的格式定義變量。

private List<Tag> tags = new ArrayList<>();

我們熟悉的數(shù)組去哪了?

回顧數(shù)組

我們學(xué)習(xí)c語(yǔ)言,c++,會(huì)學(xué)到數(shù)組是存儲(chǔ)同類(lèi)型的一組數(shù)據(jù)。后來(lái)學(xué)習(xí)指針,知道了兩種結(jié)構(gòu),鏈?zhǔn)浇Y(jié)構(gòu)與順序結(jié)構(gòu)。再后來(lái)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)。知道了兩種結(jié)構(gòu)的優(yōu)缺點(diǎn)。

鏈?zhǔn)浇Y(jié)構(gòu)方便刪除,添加。順序結(jié)構(gòu)方便查找。

但是我們?cè)趯?shí)際使用中逐漸感受到數(shù)組在使用上的缺點(diǎn)。不僅僅是在定義時(shí)就要規(guī)定數(shù)組大小。

我們通過(guò)一個(gè)實(shí)例來(lái)說(shuō)明

Enemy[] enemys = new Enemy[3];enemys[0].name = name1;enemys[1].name = name2;enemys[2].name = name3;// 通過(guò)名字擊殺對(duì)方public void kill(string name) { for (Enemy enemy : this.enemys) { if (enemy.name === name) { enemy.death(); System.out.println('擊殺成功'); break; } }}

比如我們玩游戲,現(xiàn)在面前有三個(gè)敵人。我們可以通過(guò)名字擊殺對(duì)方(通過(guò)什么方法擊殺對(duì)方并不是我們的重點(diǎn))。但是代碼有一些問(wèn)題。如果我們總是傳入一個(gè)名字,比如name1,此時(shí)代碼總是會(huì)顯示擊殺成功,一個(gè)敵人只有一條命。現(xiàn)在顯然與實(shí)際不符。如何解決呢。這時(shí)我們想到了一個(gè)傳統(tǒng)的解決辦法。在enemy類(lèi)里增加增加一個(gè)Boolean類(lèi)型屬性alive,默認(rèn)值為true。此時(shí)改寫(xiě)kill方法代碼。

public void kill(string name) { for (Enemy enemy : this.enemys) { if (enemy.name === name && enemy.alive === true) { enemy.death(); enemy.alive = false; System.out.println('擊殺成功'); break; } }}

就很好的解決了一個(gè)敵人可以被擊殺多次的bug。但是,問(wèn)題解決了,還有一些不足。

我們雖然不會(huì)顯示一個(gè)敵人多次擊殺成功。但是還是要搜尋一遍。有沒(méi)有更好的辦法呢。

ArrayList

如果我們能在成功擊殺的時(shí)候。能夠?qū)⑦@個(gè)敵人移除數(shù)組,并將數(shù)組長(zhǎng)度減一。將會(huì)變得完美。但是,通過(guò)數(shù)組是實(shí)現(xiàn)不了的。

這時(shí)ArrayList很好的解決了這個(gè)問(wèn)題。

ArrayList并不是一個(gè)數(shù)組。而是Java函數(shù)庫(kù)的一個(gè)類(lèi)。我們通過(guò)ArrayList來(lái)改寫(xiě)一下我們的代碼。

ArrayList<Enemy> enemys = new ArrayList<Enemy>();Enemy enemy1 = new Enemy();enemy1.name = name1;enemys.add(enemy1);Enemy enemy2 = new Enemy();enemy2.name = name2;enemys.add(enemy2);Enemy enemy3 = new Enemy();enemy3.name = name3;enemys.add(enemy3);// 通過(guò)名字擊殺對(duì)方public void kill(string name) { for (Enemy enemy : this.enemys) { if (enemy.name === name) { enemy.death(); this.enemys.remove(enemy); System.out.println('擊殺成功'); break; } }}

這時(shí),當(dāng)我們成功擊殺敵人時(shí),將敵人移除。就會(huì)使得下次遍歷時(shí)次數(shù)變少,并且也避免了重復(fù)殺死一個(gè)敵人的bug。

List與ArrayList

上邊的代碼中,我們?cè)诙x時(shí)是聲明的ArayList變量類(lèi)型為ArrayList類(lèi)型

ArrayList<Enemy> enemys = new ArrayList<Enemy>();

但是回到我們的實(shí)際項(xiàng)目中為什么是List類(lèi)型呢

我們剛才說(shuō)到ArrayList是一個(gè)類(lèi)。我們看一下ArrayList類(lèi)的繼承關(guān)系

Java中為何要使用ArrayList

而List是一個(gè)接口

public interface List<E> extends Collection<E> {}

所以說(shuō)ArrayList是List的一個(gè)實(shí)現(xiàn)類(lèi)。而我們?cè)趯?shí)際項(xiàng)目中寫(xiě)

List<Subject> usedSubjects = new ArrayList<>();

也就實(shí)現(xiàn)了以下格式代碼

接口 變量名 = new 接口實(shí)現(xiàn)類(lèi)();

能夠?qū)崿F(xiàn)此寫(xiě)法的一個(gè)原因就是面向?qū)ο蟮娜筇攸c(diǎn)之一——多態(tài)。什么是多態(tài)?舉個(gè)例子,對(duì)于以下Dog類(lèi)

class Animal {}class Gog extends Animal {}

我們?cè)诙x對(duì)象時(shí)總是通過(guò)這樣來(lái)定義

Dog dog = new Dog();

而多態(tài)允許我們可以使用這種方式定義

Animal dog = new Dog ();

多態(tài)不僅支持子類(lèi)與父類(lèi)之間,也支持接口與他的實(shí)現(xiàn)類(lèi)之間。

那么這么寫(xiě)有什么好處呢?

List接口有多個(gè)實(shí)現(xiàn)類(lèi),現(xiàn)在你用的是ArrayList,也許哪一天你需要換成其它的實(shí)現(xiàn)類(lèi),如 LinkedList或者Vector等等,這時(shí)你只要改變這一行就行了: List list = new LinkedList(); 其它使用了list地方的代碼根本不需要改動(dòng)。

假設(shè)你開(kāi)始用ArrayList alist = new ArrayList(), 這下你有的改了,特別是如果你使用了ArrayList實(shí)現(xiàn)類(lèi)特有的方法和屬性。

以上就是Java中為何要使用ArrayList的詳細(xì)內(nèi)容,更多關(guān)于Java ArrayList的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 91久久青青草原免费 | 亚洲欧美制服丝袜一区二区三区 | 日本三级黄色网址 | 国产精品一级香蕉一区 | 精品国产品香蕉在线观看75 | 精品一区 二区三区免费毛片 | 国产成人片 | 亚洲欧美日韩另类在线 | 免费高清观看青青草原 | 亚洲第一网站免费视频 | 最新国产精品 | 久久精品国产99久久72 | a免费视频 | 古代级a毛片在线 | 大美女香蕉丽人视频网站 | 亚洲国产品综合人成综合网站 | 香蕉精品 | 欧美一区二区三区精品国产 | 国产乱子精品免费视观看片 | 在线日韩观看 | 成人免费视频网站 | 天天噜噜揉揉狠狠夜夜 | 午夜精品一区二区三区在线观看 | 欧美一区二区三区免费 | 精品一区二区三区免费毛片爱 | 免费观看www视频 | 在线国产一区 | 99re九精品视频在线视频 | 免费看国产做爰大片 | www.一区| 欧美超级碰碰 | 一级黄色片在线播放 | 国产日韩欧美三级 | 欧美日韩亚洲区久久综合 | 男女晚上激烈的拍拍拍免费看 | 亚洲精品系列 | 国产午夜精品一区二区三区嫩草 | 精品一成人岛国片在线观看 | 免费又爽又黄的禁片1000部 | 国产一区二区三区四区20p | 国产精品第44页 |