我目前有一个需要使用抽象和泛型的项目,但我甚至不知道应该从哪里开始。抽象类如下。
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&lt;&gt;因为没有传递给构造函数的元素。但是,构造函数应该实例化一个新列表。我也无法弄清楚我应该如何能够访问该列表中的单个元素。如果我能够对构造函数中需要发生的事情有一点了解,我应该能够弄清楚如何实现其余的方法。
答案 0 :(得分:0)
您的LList
是一个单链表,其中每个元素都有一个值和一个指向后面列表的链接。列表的最后一个元素将始终是Nil
对象,表示一个空列表。首次初始化空列表时,您只需指定list = new Nil<>();
即可。向列表中添加元素时,可以将其重新指定为list = new Cons<>(elem, list);
。
要按索引访问列表中的元素,只需使用调用while
的{{1}}循环,直到它达到所需的索引或找到列表的末尾。< / p>
getNext()