【发布时间】:2017-07-22 23:36:04
【问题描述】:
我目前有一个需要使用抽象和泛型的项目,但我什至不知道我应该从哪里开始。抽象类如下。
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 因为没有元素传递给构造函数。但是,构造函数应该实例化一个新列表。我也无法弄清楚我应该如何访问该列表的单个元素。如果我对构造函数中需要发生的事情有一点了解,我应该能够弄清楚如何实现其余的方法。
【问题讨论】:
-
当您将 Cons 的实例放入 Links 类时,您将只能使用在 Links 类中声明的方法。在 LList 类中将列表类型更改为 Cons
或合并 Cons 和 Links 类,因为我认为没有抽象点。 -
get的第二个参数是什么?
标签: java list generics linked-list