成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁技術文章
文章詳情頁

Java中為何要使用ArrayList

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

前言

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

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

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

回顧數(shù)組

我們學習c語言,c++,會學到數(shù)組是存儲同類型的一組數(shù)據(jù)。后來學習指針,知道了兩種結構,鏈式結構與順序結構。再后來學習數(shù)據(jù)結構。知道了兩種結構的優(yōu)缺點。

鏈式結構方便刪除,添加。順序結構方便查找。

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

我們通過一個實例來說明

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

比如我們玩游戲,現(xiàn)在面前有三個敵人。我們可以通過名字擊殺對方(通過什么方法擊殺對方并不是我們的重點)。但是代碼有一些問題。如果我們總是傳入一個名字,比如name1,此時代碼總是會顯示擊殺成功,一個敵人只有一條命。現(xiàn)在顯然與實際不符。如何解決呢。這時我們想到了一個傳統(tǒng)的解決辦法。在enemy類里增加增加一個Boolean類型屬性alive,默認值為true。此時改寫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; } }}

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

我們雖然不會顯示一個敵人多次擊殺成功。但是還是要搜尋一遍。有沒有更好的辦法呢。

ArrayList

如果我們能在成功擊殺的時候。能夠將這個敵人移除數(shù)組,并將數(shù)組長度減一。將會變得完美。但是,通過數(shù)組是實現(xiàn)不了的。

這時ArrayList很好的解決了這個問題。

ArrayList并不是一個數(shù)組。而是Java函數(shù)庫的一個類。我們通過ArrayList來改寫一下我們的代碼。

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);// 通過名字擊殺對方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ù)變少,并且也避免了重復殺死一個敵人的bug。

List與ArrayList

上邊的代碼中,我們在定義時是聲明的ArayList變量類型為ArrayList類型

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

但是回到我們的實際項目中為什么是List類型呢

我們剛才說到ArrayList是一個類。我們看一下ArrayList類的繼承關系

Java中為何要使用ArrayList

而List是一個接口

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

所以說ArrayList是List的一個實現(xiàn)類。而我們在實際項目中寫

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

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

接口 變量名 = new 接口實現(xiàn)類();

能夠實現(xiàn)此寫法的一個原因就是面向對象的三大特點之一——多態(tài)。什么是多態(tài)?舉個例子,對于以下Dog類

class Animal {}class Gog extends Animal {}

我們在定義對象時總是通過這樣來定義

Dog dog = new Dog();

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

Animal dog = new Dog ();

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

那么這么寫有什么好處呢?

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

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

以上就是Java中為何要使用ArrayList的詳細內容,更多關于Java ArrayList的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲综合91社区精品福利 | 日本三级欧美三级人妇英文 | 成人在线免费播放 | 可以免费看黄的网址 | 欧美一级性 | 在线91精品亚洲网站精品成人 | 韩国一级特黄清高免费大片 | 亚洲欧美综合一区二区三区四区 | 欧美特级另类xxx | 久久精品久久精品久久精品 | 三级黄色在线 | 女bbbbxxxx毛片视频0 | 草草影院视频 | 国产三级日产三级日本三级 | 欧美亚洲国产视频 | 久久在线精品 | 一区二区在线播放福利视频 | 看毛片的网址 | 欧美激情第一欧美在线 | 欧美日韩精品一区二区三区视频播放 | 5x社区直接进入一区二区三区 | 久久成人免费观看全部免费 | 国产精品免费视频能看 | 欧美成人极品怡红院tv | 成人免费网站视频www | 国产成人精品高清在线观看99 | 欧美日韩一区二区视频图片 | 男女午夜免费视频 | 国产第一区二区三区在线观看 | 大量真实偷拍情侣视频野战 | 中文字幕一二区 | 亚洲国产99在线精品一区二区 | 亚洲美女一级片 | 91久久国产视频 | 久在线观看视频 | 正在播放国产精品 | 97青草香蕉依人在线播放 | 美女亚洲综合 | 亚洲国产精选 | 欧美大屁股精品毛片视频 | 国产成人免费高清在线观看 |