《数据结构与抽象:Java语言描述(原书第4版)》一2.1.6 实现更多的方法

简介:

本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第2章 ,第2.1.6节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.1.6 实现更多的方法

既然可以向包中添加对象,那么就可以实现其余的方法,从最简单的开始。直到我们明白如何查找一个包时再来定义remove方法。
方法isEmpty和getCurrentSize。方法isEmpty和getCurrentSize的定义很简单,正如你所见的:
image

安全说明:方法应该何时调用checkInitialization?

方法isEmpty和getCurrentSize没有调用checkInitialization。虽然它们能调用,但我们不想因不必要的安全检查而使客户的性能降低。两个方法都涉及数据域numberOfEntries。即使构造方法没有完成它的初始化,也没有将这个域设置为0,但Java使用默认值将它初始化为0。所以,任何已进行部分初始化的包都是空的。对于ArrayBag,访问数组bag的方法都应该确保它已存在。

注:有些方法的定义非常简单,几乎与类的早期版本中用来定义它们的存根是一样的。方法isEmpty和getCurrentSize就是这样一种情况。虽然这两个方法不在第一组核心方法中,但它们本来可以在,即我们可以更早地定义它们,而不是为它们写存根。

方法getFrequencyOf。为计数给定对象在包中出现的次数,我们计数对象在数组bag中出现的次数。使用for循环,下标从0到numberOfEntries-1,将给定对象与数组中的每个对象进行比较。当发现相等时,计数器加1。循环结束时,只要返回计数器的值就可以了。注意,比较对象时必须使用方法equals,而不是使用相等操作符==,即必须写语句
image

而不是写语句
image

假定在对象所属的类中定义了自己的equals方法。
这个方法定义如下。
image

方法contains。要查看包中是否含有给定的对象,可以再次查找数组bag。这里需要的循环类似于方法getFrequencyOf中使用的,但是一旦发现要寻找项的第一次出现,循环就应该立刻停止。描述这个逻辑的伪代码如下:
image

在两个条件下,这个循环会终止:已经在数组中找到anEntry或者已经查找了整个数组但没成功。
然后定义方法contains。
image

注:两种循环

为计数数组中项出现的次数,方法getFrequencyOf使用一个循环来访问数组的所有项。事实上,循环体执行了numberOfEntries次。相反,为表示一个给定项是否出现在一个数组中,方法contains中的循环一旦找到要寻找的项就立即结束。这个循环的循环体执行的次数为1~numberOfEntries。你应该能轻松地写出执行固定次数或可变次数的循环。

自测题9 方法contains可以调用getFrequencyOf而不是执行一个循环,即你可以像下面这样定义方法:

image

这个定义与前一段中给出的定义相比,优缺点各是什么?
测试其他的方法。在为类ArrayBag定义其他方法的同时,应该测试它们。本书的在线网站提供的程序ArrayBagDemo2仅关注这些额外的方法。不过,你应该逐步形成一个测试程序,以便它能测试到目前为止你已经定义的所有方法。类ArrayBag到目前为止的版本,可在在线网站上名为ArrayBag2的源代码中找到。

相关文章
|
5天前
|
缓存 安全 Java
全面解读ConcurrentHashMap:Java中的高效并发数据结构
全面解读ConcurrentHashMap:Java中的高效并发数据结构
11 2
|
5天前
|
数据可视化 Java
Java语言使用DL4J实现图片分类
【6月更文挑战第14天】Java语言使用DL4J实现图片分类
15 3
|
1天前
|
存储 Java 数据管理
告别混乱!用Java Map优雅管理你的数据结构
【6月更文挑战第18天】Java Map接口简化了数据管理,如在购物平台开发中。用Map存储商品ID与对象,便于查找、修改和删除。用户管理中,Map以用户ID为键存储用户信息,支持登录验证和信息更新。订单管理同样受益,订单ID与订单对象配对,易于查询和状态变更。Map使得数据结构清晰,提升代码效率。
|
1天前
|
存储 Java 数据处理
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【6月更文挑战第18天】在Java中,HashMap基于哈希表提供快速的键值对操作,适合无序数据;而TreeMap利用红黑树保证排序,适用于有序场景。示例展示了HashMap如何存储并查找用户信息,以及TreeMap如何按员工编号排序存储员工名。两者在不同需求下优化了数据处理。
|
1天前
|
Java 大数据 API
|
1天前
|
Java 数据安全/隐私保护 开发者
Java是一种完全支持面向对象编程的语言,其面向对象特性包括封装、继承、多态和抽象等
【6月更文挑战第18天】**面向对象编程(OOP)通过对象封装状态和行为,实现问题域的抽象。Java全面支持OOP,核心特性包括**: - **封装**:保护数据安全,隐藏内部细节。 - **继承**:子类继承父类属性和行为,促进代码重用。 - **多态**:一个接口多种实现,增强灵活性和扩展性。 - **抽象**:通过接口和抽象类抽离共性,简化复杂性。 **Java的OOP便于理解和解决复杂系统问题。**
12 3
|
2天前
|
存储 Java 索引
【Java】LinkedList vs. ArrayList:Java中的数据结构选择
【Java】LinkedList vs. ArrayList:Java中的数据结构选择
10 3
|
5天前
|
IDE Oracle Java
[笔记] 疯狂JAVA讲义(第3版) 第1章 Java语言概述与开发环境
[笔记] 疯狂JAVA讲义(第3版) 第1章 Java语言概述与开发环境
|
5天前
|
算法 Java 索引
12.12_黑马数据结构与算法笔记Java
12.12_黑马数据结构与算法笔记Java
16 1
|
8天前
|
安全 Java API
Java一分钟之-GraphQL:查询语言与API设计
【6月更文挑战第11天】GraphQL,一种革命性的查询语言,正在改变Web开发中的API构建和使用方式。它允许客户端按需请求数据,减少冗余,提升性能。本文概述了GraphQL的核心理念,如声明式查询、强类型和统一入口,并讨论了Java开发者常遇问题:过度查询、Schema设计和安全性。解决方案包括使用Dataloader、优化Schema和实现授权机制。通过理解原理、关注性能、重视安全和持续实践,开发者能更好地利用GraphQL构建高效API。
18 2