有谁知道为什么我们可以在此处(在subsetOf方法中)遍历“ this”关键字?据我所知,这表示一个JAVA对象。欢迎进行一些广泛的解释,以了解为什么“ this”可以这种方式工作。
public class ArrayListSet<E> implements Set<E> {
private ArrayList<E> elements;
public ArrayListSet() {
elements = new ArrayList<>();
}
@Override
public void add(E e) {
if (!elements.contains(e))
elements.add(e);
}
@Override
public void remove(E e) {
elements.remove(e);
}
@Override
public boolean contains(Object e) {
return elements.contains(e);
}
@Override
public int size() {
return elements.size();
}
@Override
public boolean subsetOf(Set<?> other) {
for (E e : this) {
if (!other.contains(e))
return false;
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
您在声明一个实现Set 接口的类,该接口本身扩展了Iterable该Collection接口。任何实现Iterable接口的对象都可以在for-each循环内使用。
因此,您的类的继承层次结构如下:
Iterable
^
|
Collection
^
|
Set
^
|
ArrayListSet
Run Code Online (Sandbox Code Playgroud)
此外,this关键字始终引用当前实例。在当你执行你的代码subsetOf()中this会指向的一个实例ArrayListSet(这是用来调用subSetOf()方法),这是一类Iterable通过继承,所以你可以在一个for-each循环使用。
另外,由于要实现,Set还需要提供接口中Iterator<E> iterator();定义的方法的实现,Set以使其成为Iterable。
随着Iterable接口的实现,需要一种iterator()返回Iterator对象实例的方法。该Iterator对象将被for-each循环被用于迭代的元素ArrayListSet。
Iterator从iterator()方法返回的类型的实现实际上定义了for-each循环使用的迭代逻辑。
要在for-each循环中使用任何对象:
步骤1:Iterable直接扩展或通过其他Iterable类型扩展。
步骤2:提供Iterator iterator()从Iterable接口继承的方法的实现。
步骤3:实施Iterator并从iterator()方法返回其实例。
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |