电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Java中為何要使用ArrayList

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

前言

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

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

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

回顧數(shù)組

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

鏈?zhǔn)浇Y(jié)構(gòu)方便刪除,添加。順序結(jié)構(gò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

如果我們能在成功擊殺的時候。能夠?qū)⑦@個敵人移除數(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; } }}

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

List與ArrayList

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

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

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

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

Java中為何要使用ArrayList

而List是一個接口

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

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

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

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

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

能夠?qū)崿F(xiàn)此寫法的一個原因就是面向?qū)ο蟮娜筇攸c之一——多態(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地方的代碼根本不需要改動。

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

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 液氮罐_液氮容器_自增压液氮罐-北京君方科仪科技发展有限公司 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 中国在职研究生招生信息网| 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 制丸机,小型中药制丸机,全自动制丸机价格-甘肃恒跃制药设备有限公司 | 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 河南15年专业网站建设制作设计,做网站就找郑州启凡网络公司 | 陕西安玻璃自动感应门-自动重叠门-磁悬浮平开门厂家【捷申达门业】 | 27PR跨境电商导航 | 专注外贸跨境电商 | 电动液压篮球架_圆管地埋式篮球架_移动平箱篮球架-强森体育 | ph计,实验室ph计,台式ph计,实验室酸度计,台式酸度计 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 全国冰箱|空调|洗衣机|热水器|燃气灶维修服务平台-百修家电 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 江门流水线|江门工作台|江门市伟涛行工业设备有限公司 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 塑料撕碎机_编织袋撕碎机_废纸撕碎机_生活垃圾撕碎机_废铁破碎机_河南鑫世昌机械制造有限公司 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 厚壁钢管-厚壁无缝钢管-小口径厚壁钢管-大口径厚壁钢管 - 聊城宽达钢管有限公司 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 高硼硅玻璃|水位计玻璃板|光学三棱镜-邯郸奥维玻璃科技有限公司 高温高压釜(氢化反应釜)百科 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 脑钠肽-白介素4|白介素8试剂盒-研域(上海)化学试剂有限公司 | 西门子代理商_西门子变频器总代理-翰粤百科 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 医学模型生产厂家-显微手术模拟训练器-仿真手术模拟训练系统-北京医教科技 | Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 |