Warship v2.0(一)
文章来源:《Head First Java》修炼感悟。
上一篇,简版的「Warship」项目终于完工。 从本章开始,老白准备在简版基础上进行升级改造,逐步打造出「Warship v2.0」。 开篇前,老白先介绍一下「数组列表」对象,它是这个项目不可缺少的重要工具。 如果师兄们感兴趣,可以接着往下看。
初识 Java 的「黑科技」
项目开发前,老白先透漏一下 Java 的「黑科技」,因为接下来的开发与它有关。 这就是 API,应用程序编程接口 (Application Programming Interface) 的缩写,它是 Java 预先定义好的函数、方法或类的集合。 API 允许应用程序访问某些功能或数据,而无需关心底层的实现细节。 你可以理解为 API 是开发者编写软件应用的积木。
还记得简版「Warship」中我们写的 GameHelper
类吗? 老白当时说过,不要在意方法如何实现的,只要关注如何调用,返回正确结果就可以了。 你可以使用同样的方式来调用 API 中的各种方法。 稍有不同的是 Java 把这些数量庞大的类都编译好,分别放在不同的包中,我们看不到它们的源代码。
编译源代码时,如果遇到无法解释的类,编译器会首先查找源文件指定的包中是否包含该类。 所以在使用 API 中的类时,需要我们做的仅仅是提供该类所属的包结构,相当于文件目录。 怎么样,Java 提供的这些开发类库是不是很给力?
ArrayList,传统数组的增强版
ArrayList 是 Java 类库中使用频率很高的一个类,与传统数组类似,它提供了更多更好用的方法,可以看做是增强版的数组对象。 那么 ArrayList 和传统数组究竟有什么不同? 且听老白慢慢道来:
- 传统数组在创建时就必须确定大小,而 ArrayList 无需指定数组大小,只要创建出此类型对象就可以使用,它的大小会自动进行调整。
- 对传统数组赋值时需要指定索引值,而 ArrayList 不但可以指定索引值,也可以自己管理大小,永远不存在超出索引范围的异常。
- 传统数组需要使用「方括号+索引」的语法引用某个元素,而 ArrayList 就是一个普通的类对象,使用
.
运算符就可以调用它的方法。 - Java1.5 以后的 ArrayList 可以参数化类型,就是只允许保存尖括号
<>
中指定的对象类型或者兼容类型,很大程度确保了类型安全问题。 目前阶段,不需要了解太深,后续 Collection 章节会有专门介绍。
ArrayList 常用方法介绍
由于 API 中的类多达数百个,并且还在不断更新中,仅凭记忆肯定不现实。 建议下载 API 帮助文档,文档中有关于每个类的详细描述,日后也可以随时翻阅。 当查阅某个类时,要注意它在哪个包中,它都可以做什么,以及需要什么参数、返回什么类型的数据等等。
比如上面介绍的 ArrayList,在参考文档中你可以找到一个称为 indexOf()
的方法,我们将会在 Warship 类中使用到它。 但是你所能知道的仅限于该方法需要提供一个对象参数,以及返回一个 int
类型的索引值,而如果指定对象没有出现在数组列表中,只看方法名字我们不知道将会发生什么。 API 帮助文档会列出更多细节供你参考,如果没有找到符合对象该方法会返回 -1
。 这就是 API 文档能带给我们的便利,请善用它,或许就是你日后成功的重要工具。
我们来看看 ArrayList 的常用方法:
序号 | 方法名称 | 功能描述 |
---|---|---|
1 | add(Object elem) | 向数组列表中添加指定的 elem 对象 |
2 | remove(int index) | 移除 index 索引处的对象 |
3 | remove(Object elem) | 移除指定的 elem 对象 |
4 | contains(Object elem) | 查询数组列表中是否含有 elem 对象,如果包含该对象则返回 true ,否则返回 false |
5 | isEmpty() | 检查是否是空列表,如果是则返回 true ,否则返回 false |
6 | indexOf(Object elem) | 返回 elem 对象的索引值,若不存在该对象返回 -1 |
7 | size() | 返回数组列表中的元素个数 |
8 | get(int index) | 返回 index 索引处的对象 |
ArrayList 基本操作
在使用 ArrayList 的某个方法时,你无需在意方法是怎样实现的,只要把它当作是你自己实现的方法正常调用就可以。 先看看如何创建数组列表:
ArrayList<Warship> shipList = new ArrayList<Warship>();
这样就声明好了一个数组列表,Warship
表示将来放入这个列表中的数据类型。 如果抛开数据类型的声明,这个过程很像实例化一个普通对象。
看下如何向列表中添加对象:
Warship shipA = new Warship();
shipList.add(shipA);
继续向列表中添加对象:
Warship shipB = new Warship();
shipList.add(shipB);
查询此时列表大小:
int theSize = shipList.size();
查询列表中是否包含某个对象:
boolean isIn = shipList.contains(shipA);
查询某个对象在列表中的位置:
int indexB = shipList.indexOf(shipB);
查询列表是否为空:
boolean isEmpty = shipList.isEmpty();
从列表中删除某个元素,注意,此时列表会自动缩小:
shipList.remove(shipA);
实际上 ArrayList 对象的方法远不止这些,老白只列出了其中最常用的。 如果大家感兴趣可以自己查阅 API 文档,在接下来的开发中我们将会用到这些方法。
《 上一篇 休闲时刻 - 打造 CMD 战舰(五) | 下一篇 Warship(二)》 |
---|