我目前正在努力完成一项姗姗来迟的任务。 我应该使用泛型制作一个链表。或者,我有一个名为Creature的接口,该列表应该排序。但是怎么样?当界面无法生成Creature nextCreature指针时,列表如何对生物进行排序?我知道要使用普通对象创建一个链表,但这个通用的东西让我感到难过。
这只是这项任务的一小部分,但由于这一点,我无处可去。
答案 0 :(得分:3)
通用链表类通常使用通用辅助类来实现,以表示列表的节点。此Node类将包含T类型的元素(其中T是泛型参数)和对下一个节点(类型Node<T>
)的引用。所以它看起来像这样:
class Node<T> {
T element;
Node<T> next;
};
如果是双向链表,该节点还将包含对前一节点的引用。使用此Node类,您应该能够很好地定义链接列表实现(列表将只包含对第一个节点的引用(以及双链接列表的最后一个节点),然后通过操作来定义列表操作节点)。
答案 1 :(得分:3)
您的问题是您不得不考虑链表中的每个对象都必须指向下一个(可能是之前的)对象。这不太对。您需要做的是构建一个只包含其他对象的对象链接列表。因此,不要试图找出如何修改Creature以使其具有指针,而只需创建一个通用ListEntry对象的链接列表,每个对象都有对其他ListEntrys的引用,并且可以保留一些待指定的(通用的) )输入T.从外面看,每个生物都会像其他人一样引用,但从内部你会知道每个生物只是由一个ListEntry对象携带。这是他们谈论封装时的意思之一。
顺便说一句,这是在Java Collections框架中完成的。
答案 2 :(得分:1)
只要您实施Comparable,就会自动处理排序:
class Creature implements Comparable {
public int compareTo(Object o) {
return 0; // TODO: Your compare function here.
}
}
class Ape extends Creature {}
class Elephant extends Creature {}
然后,您可以创建一个通用列表并对其进行排序:
public static void main(String[] args) {
LinkedList<Creature> creatures = new LinkedList<Creature>();
Collections.addAll(creatures, new Elephant(), new Ape());
Collections.sort(creatures);
}
答案 3 :(得分:0)
public interface Creature {
public void doSomething();
}
public class MyCreature implements Creature {
public void doSomething() { }
}
你可以在你的代码中使用它:
List<Creature> genericList = new LinkedList<Creature>();
genericList.add(new MyCreature());
Creature c = genericList.get(0);