泛型如何在我自己的链表中将迭代器定义为Java中的节点?
我想在我自己的链表中为使用Consumer的foreach方法实现Iterable接口,但我不知道如何使next()方法返回一个节点而不是泛型类型。我知道通常您希望迭代器是存储在节点中的数据类型,但为了更大的灵活性,我希望它是节点本身。一般来说,我对泛型和Java相当陌生
这是我课堂上的相关部分。此外,还有一些add和remove方法在这里并不真正感兴趣
import java.util.Iterator;
class OwnList<Type> implements Iterable<T>{
class Node{
Type data;
Node next;
public Node(Type data, Node next){
this.data = data;
this.next = next;
}
}
Node head;
@Override
public <T> Iterator<T> iterator(){
Iterator<T> iterator = new Iterator<T>(){
private Node index = head;
@Override
public boolean hasNext(){
return index.next == null ? false : true;
}
@Override
public T next(){
return index = index.next;
}
@Override
public void remove(){
}
};
return iterator;
}
# 1 楼答案
我把它分为两个类,而不是把它们都混在一起
节点。java
节点列表。java
编辑-找到了另一种重写节点的方法。java。好的一面是它的代码要少得多。唯一的问题是您的数据现在是shallowly immutable。而且,这只适用于Java14或更高版本
节点。java-返工
此外,您不需要对节点列表进行任何更改。java-您只需切换出节点即可。java使用此不可变版本