1. 抽象数据类型ADT

抽象数据类型( ADT,Abstract Data Type)是指一个数据结构的数学模型以及定义在此数学模型上的一组操作。

抽象数据类型是描述数据结构的一种理论工具,其目的是使人们能够独立于程序的实现细节来理解数据结构的特性。抽象数据类型的定义取决于它的一组逻辑特性,而与计算机内部如何表示无关。

要理解一种ADT,需要理解它的三方面:数据对象如何定义、数据对象之间的关系如何定义、对数据对象的操作如何定义。

2. Java Libraries

Java具有某些可以使用的内置ADT。这些都打包在Java库中。
java.util库中包含三个最重要的ADT:
Week 4.3 | Lecture 11 | 抽象类 | CS61B-Spring-2018
(白色是接口,蓝色是具体类)

  • List:items的有序集合。流行的实现是ArrayList
    eg.List<String> words = new ArrayList<>();
    ArrayList是List的子类;List是接口不能被实例化,而 ArrayList可以。这句话也可以理解成,我想要一个list,不管是啥都行,在new的时候我指定用ArrayList来实现。

  • Set:集合中的items是无序且无重复的。流行的实现是HashSet
    eg. Set<String> ss = new HashSet<>();

  • Map:键/值对的集合。您可以通过键访问该值。
    流行的实现是HashMap
    eg.Map<String, Integer> counts = new HashMap<String, Integer>();

3. Java的优点

没太看懂,先复制过来了

  • 由于具有以下功能,可以减少编写程序的时间:
    • 静态类型(提供类型检查并帮助指导程序员)。
    • 接口继承提供了更清晰的多态性。
    • 访问控制修饰符(可能指的是private吧)使abstraction barrier(?)更加牢固。
  • 由于具有以下功能,代码效率更高:
    • 能够更好地控制engineering tradeoff(?)。
    • single valued arrays(?)可带来更好的性能。
  • 基本数据结构更类似于基础硬件:
    用Python做ArrayDeque很奇怪,因为不需要调整数组大小。但是,在硬件中,不存在可变长度的数组。

4. 抽象类与接口

(1)接口的特性

  • 所有方法都必须public。
  • 所有变量必须是public static final(即常量)。
  • 无法实例化
  • 默认情况下,所有方法都是抽象的(不写实现内容),除非指定为 default。(指定为default则可以写实现内容)
  • 每个类可以implements多个接口。

Week 4.3 | Lecture 11 | 抽象类 | CS61B-Spring-2018

(2)抽象类的特性

  • 方法可以是public或private
  • 可以有任何类型的变量
  • 无法实例化
  • 默认情况下,方法是具体的(需要写实现内容),除非指定为 abstract(不写实现内容)
  • 每个类只能extends一个抽象类

Week 4.3 | Lecture 11 | 抽象类 | CS61B-Spring-2018

注意:
抽象类不一定要实现所继承的接口中的方法,甚至不一定要列出来,相当于抽象类默认继承了接口中的抽象方法。

5. Packages

包名称为所有内容提供了唯一名称。
使用import导入包,就可以使用其中的类。

相关文章: