1.1.2抽象数据类型举例

这节主要介绍了几个抽象数据类型的例子

* 几何对象

* 信息处理对象

* 字符串对象

此外这本书中用到的数据类型可以分为以下几类

  1. java.lang.* 包下的抽象数据类型
  2. java标准库中的抽象数据类型
  3. I/O处理类的抽象数据类型
  4. 面向数据类抽象数据类型(现实中的实例,通过面向对象的封装性包装)
  5. 集合类抽象数据类型( bag, stack, queue )
  6. 面向操作的抽象数据类型( 路径广度优先算法, 深度优先算法 )
  7. 图算法相关的抽象数据类型(无向图, 有向图)

1:几何对象

为3种常见的几何对象定义了抽象数据类型,这3中几何对象是Point2D(平面上的点), Interval1D(直线上的间隔),Interval2D(平面上的间隔,即和数轴对齐的长方形)

  • Point2D的API

            1.1.2抽象数据类型举例_第1张图片

  • Interval1D的API

            1.1.2抽象数据类型举例_第2张图片

  • Intrval2D的API

            1.1.2抽象数据类型举例_第3张图片


下面是3个API的综合用例(在控制台上绘出一个长方形,计算随机分布的10000个点有多少个落在该长方形内)

import java.util.Scanner;

import edu.princeton.cs.algs4.Interval1D;
import edu.princeton.cs.algs4.Interval2D;
import edu.princeton.cs.algs4.Point2D;

public class Test {
	public static void main(String[] args) {
		double xlo = Double.parseDouble(args[0]);
		double xhi = Double.parseDouble(args[1]);
		double ylo = Double.parseDouble(args[2]);
		double yhi = Double.parseDouble(args[3]);
		int t = Integer.parseInt(args[4]);
		
		Interval1D xinterval = new Interval1D(xlo, xhi);
		Interval1D yinterval = new Interval1D(ylo, yhi);
		Interval2D box = new Interval2D(xinterval, yinterval);
		box.draw();
		
		Counter c = new Counter();
		for(int i = 0; i < t; i++) {
			double x = Math.random();
			double y = Math.random();
			Point2D point = new Point2D(x, y);
			
			if(box.contains(point))
				c.increment();
			else
				point.draw();
		}
		
		System.out.println("落在矩形内的点有" + c.getCount() + "个");
		System.out.println("该矩形的面积为:" + box.area());
	}
}

public class Counter {
	private int count;
	
	public void increment() {
		this.count++;
	}
	
	public int getCount() {
		return this.count;
	}
}

运行得到的结果如下

1.1.2抽象数据类型举例_第4张图片



2:信息处理对象

面向对象编程一个很重要的思想就是“一切皆为对象”,如下例子,封装了一个Date类

class Date {
	private int year;
	private int month;
	private int day;
	
	public Date(int year, int month, int day) {
		this.year = year;
		this.month = month;
		this.day = day;
	}

	public int getYear() {
		return year;
	}

	public int getMonth() {
		return month;
	}

	public int getDay() {
		return day;
	}

	@Override
	public String toString() {
		return "Date [year=" + year + ", month=" + month + ", day=" + day + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + day;
		result = prime * result + month;
		result = prime * result + year;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Date other = (Date) obj;
		if (day != other.day)
			return false;
		if (month != other.month)
			return false;
		if (year != other.year)
			return false;
		return true;
	}
	
	
}



你可能感兴趣的:(1.1.2抽象数据类型举例)