泛型
泛型保证代码 可维护性,实现代码 重用,省去不必要的 类型转换 (T 通常是 “Type” 的缩写,即任意类型),接下来举一个在 类 中的例子快速复习(泛型也可以用于 方法 中)
// ----- In Box.java -----
package Text;
public class Box<T> {
private T value;
public void setValue(T x) { value = x; }
public T returnValue() { return value; }
}
// ----- In BoxTest.java -----
package...
import...
public class BoxTest {
public void test1() {
Box<Integer> b1 = new Box<>();
b1.setValue(1);
assertEquals(1, b1.returnValue(), 0); // Pass
}
}
接口文件(Interface File)
通过接口文件,只需要考虑实现哪些方法,创建 接口文件,放入要实现的 方法名 及 类型 ,如 interface Deque<T>,具体实现由 类 完成,使代码更加标准化。在类中,通过 implements 调用 (implements Iterable<T>, deque.Deque<T>
default 在 Java 接口提供 默认方法实现,如 default boolean isEmpty() { return size() == 0; }
(注:Java8 以下版本不支持在接口文件实现具体方法)

在 重写 或 实现 的方法上方写上 @Override 以起到帮助作用
接口文件的方法在类中必须 全部实现(当然可以添加 abstract 声明抽象 以部分实现,这里不做学习重点),但 每个类 中都可以有自己的新方法。
值得注意的是,针对 Object 类中的方法(如 equals(Object o)),有一个特殊规则:其已经在 Object 中定义,子类无需显式实现
Other
Map – HashMap
文档中必须要求顺序是一样的。这和视频有出入,我没看到,浪费了 4 个小时左右,野蛮
以下是捣鼓半天也没能通过的代码(其实实现的挺好的),刷课不看文档横冲直撞已经不是一天两天了。。唉。。
public boolean equals(Object obj) {
if (this == obj) { return true; }
if (!(obj instanceof Deque)) { return false; }
Deque<T> other = (Deque<T>) obj;
if (this.size() != other.size()) { return false; }
Map<T, Integer> thisElementCounts = new HashMap<>();
for (T element : this) {
thisElementCounts.put(element, thisElementCounts.getOrDefault(element, 0) + 1);
}
Map<Object, Integer> otherElementCounts = new HashMap<>();
for (int i = 0; i < other.size(); i++) {
Object element = other.get(i);
otherElementCounts.put(element, otherElementCounts.getOrDefault(element, 0) + 1);
}
return thisElementCounts.equals(otherElementCounts);
}