算法(4th ed)(79):基础——数据抽象 4.1.12

阅读数:38 2019 年 11 月 2 日 12:08

算法(4th ed)(79):基础——数据抽象 4.1.12

(使用抽象数据类型:对象的数组)

我们已经看到,数组元素可以是任意类型的数据:我们实现的 main() 方法的 args[] 参数就是一个 String 对象的数组。创建一个对象的数组需要以下两个步骤:

  • 使用方括号语法调用数组的构造函数创建数组;
  • 对于每个数组元素调用它的构造函数创建相应的对象。

例如,下面这段代码模拟的是掷骰子。它使用了一个Counter 对象的数组来记录每种可能的值的出现次数。在 Java 中,对象数组即是一个由对象的引用组成的数组,而非所有对象本身组成的数组。如果对象非常大,那么在移动它们时由于只需要操作引用而非对象本身,这就会大大提高效率;如果对象很小,每次获取信息时都需要通过引用反而会降低效率。

复制代码
public class Rolls
{
public static void main(String[] args)
{
int T = Integer.parseInt(args[0]);
int SIDES = 6;
Counter[] rolls = new Counter[SIDES+1];
for (int i = 1; i <= SIDES; i++)
rolls[i] = new Counter(i + "'s");
for (int t = 0; t < T; t++)
{
int result = StdRandom.uniform(1, SIDES+1);
rolls[result].increment();
}
for (int i = 1; i <= SIDES; i++)
StdOut.println(rolls[i]);
}
}
模拟 `T` 次掷骰子的 `Counter` 对象的用例
复制代码
% java Rolls 1000000
167308 1's
166540 2's
166087 3's
167051 4's
166422 5's
166592 6's

有了这些对象的知识,运用数据抽象的思想编写代码(定义和使用数据类型,将数据类型的值封装在对象中)的方式称为面向对象编程。刚才学习的基本概念是我们面向对象编程的起点,因此有必要对它们进行简单的总结。数据类型指的是一组值和一组对值的操作的集合。我们会将数据类型实现在独立的 Java 类模块中并编写它们的用例。对象是能够存储任意该数据类型的值的实体,或数据类型的实例。对象有三大关键性质:状态标识行为。一个数据类型的实现所支持的操作如下。

  • 创建对象(创造它的标识):使用 new 关键字触发构造函数并创建对象,初始化对象中的值并返回对它的引用。
  • 操作对象中的值(控制对象的行为,可能会改变对象的状态):使用和对象关联的变量调用实例方法来对对象中的值进行操作。
  • 操作多个对象:创建对象的数组,像原始数据类型的值一样将它们传递给方法或是从方法中返回,只是变量关联的是对象的引用而非对象本身。

这些能力是这种灵活且应用广泛的现代编程方式的基础,也是我们在本书中对算法研究的基础。

评论

发布