自用。
package
软件包是 Java 类的集合,所有这些类都为某个共同目标而工作。在 CS 61B 中,我们已经在不知不觉中看到了包。例如,org.junit 就是一个包,其中包含各种对测试有用的类,包括我们熟悉的 Assert 类,它包含有用的静态方法,如 assertEquals。换句话说,当我们看到 org.junit.Assert.assertEquals 时,org.junit 是包名,Assert 是类名,assertEquals 是方法名。我们称 org.junit.Assert.assertEquals 为方法的 "规范名称",称 assertEquals 为方法的 "简单名称"。
创建软件包时,我们会在文件顶部使用 package 关键字指定软件包名称,从而指定代码是软件包的一部分。例如,如果我们想声明一个文件是 deque 包的一部分,我们可以在文件顶部添加以下一行。 如:
package deque;
使用了包机制后,如果在一个类中使用了其他包中的类,需要使用 import 来引入。如果程序员想要使用 deque 包中的类或方法,他们必须使用完整的规范名称,例如 deque.ArrayDeque。
通常,包名是编写代码的实体的互联网地址,但要倒过来。例如,JUnit 库托管在 junit.org,因此包名为 org.junit。
软件包为什么有用?归根结底就是 "规范 "这个词。只要没有两个程序员为他们的包使用相同的包名,我们就可以在多个不同的上下文中自由使用相同的类名。例如,可能存在一个名为 com.hrblock.TaxCalculator 的类,它不同于 com.turbotax.TaxCalculator。由于要求使用完整的规范名称或使用导入,这意味着我们绝不会在本意是使用另一个类的情况下意外使用其中一个类。
从概念上讲,你可以把软件包理解为类似于计算机上的不同文件夹。在构建一个大型系统时,将其组织成不同的包是一个好主意。
import
1. 直接引用类,import java.util.Vector。
2. 引用整个包里的所有类 ,import java.awt.* *号代替类名,但不代替包名。awt里子包的类不会被引用。
双端队列
注:deque是double ended queue的缩写,即双端队列。
具体来说,任何双端队列的实现都包含以下内容:
- public void addFirst(T item):将 T 类型的项目添加到 deque 的前端。可以假设 item 永远不会为空。
- public void addLast(T item):将 T 类型的项目添加到 deque 的后部。可以假设 item 绝不为空。
- public boolean isEmpty():如果 deque 为空,则返回 true,否则返回 false。
- public int size():返回 deque 中的条目数。
- public void printDeque():从第一个到最后一个打印 deque 中的项目,以空格分隔。打印完所有项目后,再打印一行。
- public T removeFirst():删除并返回 deque 中最前面的项目。如果不存在该项目,则返回 null。
- public T removeLast():删除并返回位于 deque 后部的项目。如果不存在该项目,则返回 null。
- public T get(int index):获取给定索引处的项目,其中 0 表示前一个项目,1 表示下一个项目,以此类推。如果不存在该项目,则返回 null。不得更改 deque!
外加cs61b的两个特殊要求:
- public Iterator<T> iterator():让 Deque 对象是可迭代的(即 Iterable<T>),因此我们必须提供此方法来返回一个迭代器。(不要求完成)
- public boolean equals(Object o):返回参数 o 是否等于 Deque。如果 o 是一个 Deque,并且包含相同顺序的相同内容(由泛型 T 的 equals 方法确定),则视为相等。here is相关链接.
其他要求:
类应该接受任何通用类型(不仅仅是整数)
在本项目中,你将为 Deque 接口提供两种实现:一种由链接列表驱动,另一种由调整大小的数组驱动。