《数据结构与抽象:Java语言描述(原书第4版)》一1.1 什么是包

简介:

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

1.1 什么是包

设想一个纸袋,或反复使用的布袋,甚至一个塑料袋。当人们购物、打包午餐或者吃土豆片时会用到袋子。袋子里装着东西。在日常用语中,包(也称为袋子——译者注)是一种容器。但在Java中,容器(container)是一个对象,它的类派生于标准类Container。这样的容器用在图形程序中。在Java中,不把包(bag)看作一种容器,而是一种集合。
包与其他集合的区别是什么呢?包仅仅是含有项,但没有按某种方式规定项的次序,也允许有重复的项。大多数的行为可由其他类型的集合执行。当描述本章中设计的集合行为时,要谨记一点,就是我们正在通过一个实际的物理包来说明一个抽象的概念。例如,纸袋内装着不同大小和形状的东西,且没有特定的次序,也不考虑它的重复性。我们的抽象包将保持无序且可能有重复的对象,但我们强调,这些对象有相同或相关的数据类型。

注:包是没有特定次序的对象的有限集合。这些对象具有相同或相关的数据类型。包可以含有重复项。

包的行为
因为包中含有有限个对象,所以报告它含有多少个对象可能是包的行为之一:

  • 得到当前包中的项数。

一个相关的行为是检测包是否为空:

  • 查看包是否为空。

我们应该能添加和删除对象:

  • 将给定对象添加到包中。
  • 从包中删除一个未指定的对象。
  • 可能的话,从包中删除一个具体对象的一次出现。
  • 从包中删除所有对象。

虽然你希望杂货店的打包员不要将6个汤罐头扔到包中的面包和鸡蛋上面,不过添加操作并没有标出对象在包中的位置。记住,包中的内容是无序的。另外,第一个删除操作只删除它能删除的任何对象。这个操作就像是伸手到袋子里把东西拿出来一样。而第二个删除操作是在包中查找某项。如果找到它,则拿出它。如果包中有多个相等的对象都满足你的查找条件,则删除其中的任意一个。如果在包中找不到该对象,则不能删除它,且要直接表示出来。最后一个删除操作只是清空包中的所有对象。
你买了多少个狗食罐头?你记得拿鱼酱了吗?袋子里有什么?可用下列操作回答这几个问题:

  • 统计包中某个对象的个数。
  • 测试包中是否含有某个对象。
  • 查看包中的所有对象。

现在我们有足够的行为。此时,我们将所有的行为写在一张纸上,或写在
image


因为包是一个抽象数据类型,所以我们仅描述它的数据并说明它的操作。不指明如何保存数据或如何实现它的操作。例如,不要考虑数组。首先,你需要明确地知道包操作都有哪些:关注什么操作可行,而不是它们如何做。即,在程序中能使用包之前,需要一组详细的规格说明。事实上,甚至在你还没确定程序设计语言前,你就应该先说明包的操作。

注:因为抽象数据类型描述了独立于程序设计语言的数据组织方式,所以实现它时你可以对程序设计语言有所选择。

相关文章
|
23天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
66 1
|
25天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
1天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
1天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
27 10
|
6天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
7天前
|
Java API
编码的奇迹:Java 21引入有序集合,数据结构再进化
编码的奇迹:Java 21引入有序集合,数据结构再进化
14 0
|
17天前
|
Java
Java语言打印九九乘法表(详解)
Java语言打印九九乘法表(详解)
15 1
Java语言打印九九乘法表(详解)
|
23天前
|
XML 存储 算法
Java数据结构与算法-java数据结构与算法(五)
Java数据结构与算法-java数据结构与算法
47 0
|
25天前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
30 0
|
25天前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0