我目前有一个需要使用抽象和泛型的项目,但我什至不知道我应该从哪里开始。抽象类如下所示。
public abstract class Links<AType> {
abstract AType getElem(); //returns the head of the list
abstract Links<AType> getNext(); //return the next link
}
这是扩展抽象类的类
public class Cons<AType> extends Links<AType> {
AType elem;
Links<AType> next;
Cons(AType elem, Links<AType> next) {
this.elem = elem;
this.next = next;
}
@Override
AType getElem() {
return elem;
}
@Override
Links<AType> getNext() {
return next;
}
}
这是另一个扩展抽象类的类
public class Nil<AType> extends Links<AType> {
Nil(){}
@Override
AType getElem() {
return null;
}
@Override
Links<AType> getNext() {
return null;
}
}
这是应该实现一切的类
public class LList<AType> {
Links<AType> list;
LList() {
list = new Cons<>();
}
Links<AType> getList() {
return list;
}
AType get(int n, AType a) {
Cons<AType> aTypeCons = new Cons<>(a, list);
return null;
}
void add(AType elem) {
//add to head of list
}
void remove(int i) {
//remove ith element
//do nothing if i is invalid
}
void print() {
//prints the list
}
}
我只是需要一些帮助来弄清楚从哪里开始制作LList课程。我无法弄清楚构造函数,因为 Links 是抽象的,所以我不能让它成为一个对象,也不能创建一个新的 Cons<>因为没有元素被传递到构造函数中。但是,构造函数应该实例化一个新列表。我也无法弄清楚我应该如何能够访问该列表中的单个元素。如果我能对构造函数中需要发生的事情有一点了解,我应该能够弄清楚如何实现其余的方法。
>您的LList
是一个单链列表,其中每个元素都有一个值和一个指向后面列表的链接。列表的最后一个元素将始终是一个Nil
对象,它表示一个空列表。首次初始化空列表时,只需分配list = new Nil<>();
。将元素添加到列表时,可以将其重新指定为list = new Cons<>(elem, list);
。
要按索引访问列表中的元素,只需使用调用getNext()
的while
循环,直到它到达所需的索引或找到列表的末尾。
AType get(int n) {
Links<AType> current = list;
while (n > 0 && current instanceof Cons) {
current = current.getNext();
n--;
}
return current.getElem();
}