1. 抽象数据类型ADT
抽象数据类型( ADT,Abstract Data Type)是指一个数据结构的数学模型以及定义在此数学模型上的一组操作。
抽象数据类型是描述数据结构的一种理论工具,其目的是使人们能够独立于程序的实现细节来理解数据结构的特性。抽象数据类型的定义取决于它的一组逻辑特性,而与计算机内部如何表示无关。
要理解一种ADT,需要理解它的三方面:数据对象如何定义、数据对象之间的关系如何定义、对数据对象的操作如何定义。
2. Java Libraries
Java具有某些可以使用的内置ADT。这些都打包在Java库中。
java.util库中包含三个最重要的ADT:
(白色是接口,蓝色是具体类)
-
List
:items的有序集合。流行的实现是
ArrayList
。
eg.
List<String> words = new ArrayList<>();
ArrayList是List的子类;List是接口不能被实例化,而 ArrayList可以。这句话也可以理解成,我想要一个list,不管是啥都行,在new的时候我指定用ArrayList来实现。
-
List的具体使用:
导包:
import java.util.List; import java.util.ArrayList;
List的常用方法有:addLast(), size()…
-
Set
:集合中的items是无序且无重复的。流行的实现是
HashSet
。
eg.
Set<String> ss = new HashSet<>();
-
Set的具体使用:
导包:
import java.util.Set; import java.util.HashSet;
List的常用方法有:add(), contains()…
-
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多个接口。
(2)抽象类的特性
-
方法可以是public或private
-
可以有任何类型的变量
-
无法实例化
-
默认情况下,方法是具体的(需要写实现内容),除非指定为 abstract(不写实现内容)
-
每个类只能extends一个抽象类
注意:
抽象类不一定要实现所继承的接口中的方法,甚至不一定要列出来,相当于抽象类默认继承了接口中的抽象方法。
5. Packages
包名称为所有内容提供了唯一名称。
使用import导入包,就可以使用其中的类。