java抽象数据类型

抽象数据类型
抽象数据类型是描述数据结构的一种理论工具。在介绍抽象数据类型之前我们先介绍一
下数据类型的基本概念。
数据类型(data type)是一组性质相同的数据元素的集合以及加在这个集合上的一组操
作。例如Java 语言中就有许多不同的数据类型,包括数值型的数据类型、字符串、布尔型
等数据类型。以Java 中的int 型为例,int 型的数据元素的集合是[-2147483648,2147483647]
间的整数,定义在其上的操作有加、减、乘、除四则运算,还有模运算等。
定义数据类型的作用一个是隐藏计算机硬件及其特性和差别,使硬件对于用户而言是透
明的,即用户可以不关心数据类型是怎么实现的而可以使用它。定义数据类型的另一个作用
是,用户能够使用数据类型定义的操作,方便的实现问题的求解。例如,用户可以使用Java
定义在int 型的加法操作完成两个整数的加法运算,而不用关心两个整数的加法在计算机中
到底是如何实现的。这样不但加快了用户解决问题的速度,也使得用户可以在更高的层面上
考虑问题。

对于一个明确的问题,要解答这个问题,总是先选用该问题的一个数据模型。接着,弄清
该问题所选用的数据模型在已知条件下的初始状态和要求的结果状态,以及隐含着的两个状
态之间的关系。然后探索从数据模型的已知初始状态出发到达要求的结果状态所必需的运算
步骤。
我们在探索运算步骤时,首先应该考虑顶层的运算步骤,然后再考虑底层的运算步骤。
所谓顶层的运算步骤是指定义在数据模型级上的运算步骤,或叫宏观运算。它们组成解答问
题步骤的主干部分。其中涉及的数据是数据模型中的一个变量,暂时不关心它的数据结构;
涉及的运算以数据模型中的数据变量作为运算对象,或作为运算结果,或二者兼而为之,简
称为定义在数据模型上的运算。由于暂时不关心变量的数据结构,这些运算都带有抽象性质,
不含运算的细节。所谓底层的运算步骤是指顶层抽象的运算的具体实现。它们依赖于数据模
型的结构,依赖于数据模型结构的具体表示。因此,底层的运算步骤包括两部分:一是数据
模型的具体表示;二是定义在该数据模型上的运算的具体实现。我们可以把它们理解为微观
运算。于是,底层运算是顶层运算的细化,底层运算为顶层运算服务。为了将顶层算法与底
层算法隔开,使二者在设计时不会互相牵制、互相影响,必须对二者的接口进行一次抽象。
让底层只通过这个接口为顶层服务,顶层也只通过这个接口调用底层的运算。这个接口就是
抽象数据类型。
抽象数据类型(abstract data type, 简称ADT)由一种数据模型和在该数据模型上的一
组操作组成。
抽象数据类型包括定义和实现两个方面,其中定义是独立于实现的。抽象数据类型的定
义仅取决于它的逻辑特性,而与其在计算机内部的实现无关,即无论它的内部结构如何变化,
只要它的逻辑特性不变,都不会影响到它的使用。其内部的变化(抽象数据类型实现的变化)
只是可能会对外部在使用它解决问题时的效率上产生影响,因此我们的一个重要任务就是如
何简单、高效地实现抽象数据类型。很明显,对于不同的运算组,为使组中所有运算的效率
都尽可能地高,其相应的数据模型具体表示的选择将是不同的。在这个意义下,数据模型的
具体表示又依赖于数据模型上定义的那些运算。特别是,当不同运算的效率互相制约时,还
必须事先将所有的运算的相应使用频度排序,让所选择的数据模型的具体表示优先保证使用
频度较高的运算有较高的效率。
我们应该看到,抽象数据类型的概念并不是全新的概念。抽象数据类型和数据类型在实
质上是一个概念,只不过是对数据类型的进一步抽象,不仅限于各种不同的计算机处理器中
已经实现的数据类型,还包括为解决更为复杂的问题而由用户自定义的复杂数据类型。例如
高级语言都有的"整数"类型就是一种抽象数据类型,只不过高级语言中的整型引进实现了,
并且实现的细节可能不同而已。我们没有意识到抽象数据类型的概念已经孕育在基本数据类
型的概念之中,是因为我们已经习惯于在程序设计中使用基本数据类型和相关的运算,没有
进一步深究而已。
抽象数据类型一方面使得使用它的人可以只关心它的逻辑特征,不需要了解它的实现方
式。另一方面可以使我们更容易描述现实世界,使得我们可以在更高的层面上来考虑问题。
例如可以使用树来描述行政区划,使用图来描述通信网络。
根据抽象数据类型的概念,对抽象数据类型进行定义就是约定抽象数据类型的名字,同
时,约定在该类型上定义的一组运算的各个运算的名字,明确各个运算分别要
有多少个参数,这些参数的含义和顺序,以及运算的功能。一旦定义清楚,人们在使用时就可以像引用
基本数据类型那样,十分简便地引用抽象数据类型;同时,抽象数据类型的实现就有了设计
的依据和目标。抽象数据类型的使用和实现都与抽象数据类型的定义打交道,这样使用与实
现没有直接的联系。因此,只要严格按照定义,抽象数据类型的使用和实现就可以互相独立,
互不影响,实现对它们的隔离,达到抽象的目的。
为此抽象数据类型可以使用一个三元组来表示:
ADT = (D, S, P)
其中D 是数据对象,S 是D 上的关系集,P 是加在D 上的一组操作。
在定义抽象数据类型时,我们使用以下格式:
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}

时间: 2024-10-25 07:29:19

java抽象数据类型的相关文章

【Python&amp;数据结构】 抽象数据类型 Python类机制和异常

这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Python编程,借着本次机会仔细学习一下. 抽象数据类型 最开始的计算机语言,关注的都是如何更加有效率地计算,可以说其目的是计算层面的抽象.然而随着这个行业的不断发展,计算机不仅仅用于计算,开发也不仅只关注计算过程了,数据层面的抽象也变得同样重要.虽然计算机语言一开始就有对数据的抽象,但是那些都只是对一些最基本的

深入理解Java之数据类型

一.概述 我们通过编程解决一个具体问题时,首先要做的工作是用各种“数据结构”表示问题中的实体对象,而后才能着手研究描述具体业务逻辑的算法.这也正印证了”程序 = 数据结构 + 算法“.而这里的数据结构,便对应着各种数据类型. 数据类型指的是一组值以及相关的一组操作.Java中有两大类数据类型:一类是原始(primitive)数据类型,包括boolean.int.double等等:还有一类是引用类型,也就是类(class),包括Java类库提供给我们的类和我们自己使用关键字class定义的类.Ja

抽象数据类型(ADT)入门(一)

抽象数据类型(ADT)入门(一) 1.抽象数据类型(Abstract Data Types,ADT)和ADT的实现 抽象数据类型:一个数据元素集合以及在这些数据上的操作. ADT的一个实现包括存储数据元素的存储结构以及实现基本操作的算法. 在这个数据抽象的思想中,数据类型的定义和它的实现是分开的,这在软件设计中是一个重要的概念.这使得只研究和使用它的结构而不用考虑它的实现细节成为可能.实际上,这通常使用在int.double.char和bool等预定义数据类型上的方法,使用这些数据类型的程序员在

算法(第4版)-1.2.1 使用抽象数据类型

总结:本小节是关于抽象数据类型的综述,包括是什么.为什么.怎么办. 重点: 1. 研究同一个问题的不同算法的主要原因:它们的性能特点不同. 2. API:通过列出所有构造函数和实例方法(及操作)并简要描述它们的功用,说明抽象数据类型的行为. 3. Java中的所有数据类型都会继承toString()方法来返回用String表示的该类型的值.Java会在用+运算符将任意数据类型的值和String值连接时调用该方法. 可以重写toString()方法.必须声明为public String toStr

C++抽象数据类型,如何抽象

C++是个多范式的语言,所以C++难学,所以C++强大,可比起java,C#,用C++来做软件开发,开发周期要长很多. 为什么呢?这是因为C++的自由度高,换句话说自由度越高地语言,开发软件的周期越长,这是有一定道理的 自由度过高就不容易掌控,java和C#它们的库很强大,这在一定程度上就限制了自由度,相当于提供了一套模式,方法,开发人员不需要去为实现这些东西而操心 然而C++程序员却需要为这些费劲心力,这体现在实现细节上. 本文要说的是抽象数据类型,抽象数据类型 ADT 一种重要的数据类型.它

java基础之java基本数据类型

1.Java数据类型基本概念: 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式.接触每种语言的时候,都会存在数据类型的认识,有复杂的.简单的,各种数据类型都需要在学习初期去了解,Java是强类型语言,所以Java对于数据类型的规范会相对严格.数据类型是语言的抽象原子概念,可以说是语言中最基本的单元定义,在Java里面,本质上讲将数据类型分为两种:简单类型和复杂类型. 简单类型:简单数据类型是不能简化的.内置的数据类型.由编程语言本身定义,它表示了

黑马程序员---Java 基本数据类型取值范围讲解

-------android培训.java培训.期待与您交流! ---------- java中的类型概念名的说法不一.让我很是迷茫,我个人的理解整理,如有错误还请高人指点,! 一.Java的类型词语理解: 1) 原始数据类型,简单类型,基本类型都是一个含义: 2)复合类型,扩展类型,复杂类型.引用类型都是一个含义: 3)浮点类型,实数.实型都是一个含义: 4)逻辑型.布尔型都是一个含义: 阅读时需要理解: 定点:定点的意思是把小数点定在末尾,小数点后没有数字的数据,Java中通常把它们称为整数

抽象数据类型

抽象数据类型是描述数据结构的一种理论工具.在介绍抽象数据类型之前我们先介绍一下数据类型的基本概念.数据类型(data type)是一组性质相同的数据元素的集合以及加在这个集合上的一组操作.例如Java 语言中就有许多不同的数据类型,包括数值型的数据类型.字符串.布尔型等数据类型.以Java 中的int 型为例,int 型的数据元素的集合是[-2147483648,2147483647]间的整数,定义在其上的操作有加.减.乘.除四则运算,还有模运算等.定义数据类型的作用一个是隐藏计算机硬件及其特性

抽象数据类型(ADT)和面向对象编程(OOP)3.3 抽象数据类型

抽象类型的新颖性和不同之处在于对操作的关注:类型的用户不需要担心它的值如何实际存储 类型无论是内置的还是用户定义的,都可以分类为可变或不可变 可变类型的对象可以被改变 String是不可变的,因为它的操作创建了新的String对象而不是改变现有的对象 有时一种类型将以两种形式提供,一种可变形式和一种不可变形式. 例如,StringBuilder是String的一个可变版本(不可互换) Creators (构造器)创建该类型的新对象.Creators可以将对象作为参数,但不是正在构建的类型的对象.