1.1.1使用抽象数据类型

概览

使用抽象数据类型主要经过以下几个步骤
* 创建对象(创造抽象数据的标识)
* 通过对象调用对应的实例方法(操作对象中的值,改变对象状态等)
* 我们还可以像使用原始数据一样来使用抽象数据类型

另外还有一些概念:
* 关于抽象数据类型的API
* 对象的一些概念以及特征

抽象数据类型的API

所谓的API,其实就是应用程序编程接口。它将列出所有构造函数以及实例方法,并简述它们的作用

这是上一节的例子(计数器):

public class Count {
    private String name;    //这个计数器的名字
    private int counter;    //记录这个计数器使用的次数

    //这是构造函数,构造此计数器的名字
    public Count(String name) { 
        this.name = name;
    }

    //该操作将计数器增加1
    public void increment() {
        this.counter++;
    }

    //该操作将返回计数器使用的次数 
    public int tally() {
        return this.counter;
    }

    //该操作返回计数器名字
    public String toString() {
        return this.name;
    }
}

然后我们将以API的形式来对这个抽象数据类型进行概括:
Count的API

对象一些概念

  • 定义: 对象是能够承载数据类型的值的实体
  • 特征:状态; 标识; 行为
    状态即数据类型中的值; 标识可以认为是对象在内存中的位置, 使其能够区别于另一个对象; 行为就是对数据的操作

创建对象

我们可以通过关键字“new”来创建对象。
以Count类为例,创建Count类的两个实例对象如下

Count heads = new Count("heads");
Count tails = new Count("tails");

每次调用new关键字,系统所要执行的步骤如下:

  1. 为对象分配新的内存空间。
  2. 调用构造函数初始化对象中的值。
  3. 返回该对象的一个引用。

调用对象实例方法

方法每一次触发都跟对象有关(静态方法除外),因此可以通过如下的方式来调用实例方法:

heads.increment();

其中括号中如有需要参数,则可以传入相对应的值。

使用对象

可以像使用原始数据类型一样使用对象。

  1. 在赋值语句中使用对象
  2. 可以向方法中传入对象或者返回。
  3. 创建并使用对象的数组

下面是一个使用对象的例子(使用了上面所提到的“计数器”的抽象数据),模拟抛硬币情形:

import java.util.Scanner;
import edu.princeton.cs.algs4.StdRandom;

public class Test {

    static Scanner in = new Scanner(System.in);

    public static void main(String args[]) {
        System.out.println("请输入总共要投掷硬币的次数:");
        int t = in.nextInt();

        Count heads = new Count("heads");
        Count tials = new Count("tials");

        for(int i = 0; i < t; i++) 
            if(StdRandom.bernoulli(0.5))
                heads.increment();
            else
                tials.increment();

        System.out.println(heads.toString() + " " + heads.tally());
        System.out.println(tials.toString() + " " + tials.tally());
        int d = heads.tally() - tials.tally();

        System.out.println("delta: " + Math.abs(d));

    }
}

运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值