如何在java中实现抽象和泛型?

时间:2017-07-22 23:36:04

标签: java list generics linked-list

我目前有一个需要使用抽象和泛型的项目,但我甚至不知道应该从哪里开始。抽象类如下。

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;因为没有传递给构造函数的元素。但是,构造函数应该实例化一个新列表。我也无法弄清楚我应该如何能够访问该列表中的单个元素。如果我能够对构造函数中需要发生的事情有一点了解,我应该能够弄清楚如何实现其余的方法。

1 个答案:

答案 0 :(得分:0)

您的LList是一个单链表,其中每个元素都有一个值和一个指向后面列表的链接。列表的最后一个元素将始终是Nil对象,表示一个空列表。首次初始化空列表时,您只需指定list = new Nil<>();即可。向列表中添加元素时,可以将其重新指定为list = new Cons<>(elem, list);

要按索引访问列表中的元素,只需使用调用while的{​​{1}}循环,直到它达到所需的索引或找到列表的末尾。< / p>

getNext()