[解决了]
我是一个学习 Java 的 C++ 人(希望)是为了一份即将到来的工作。因此,我正在自己练习在 Java 中实现链接列表。我完成了一个标准的双向链表,它工作得很好。然而,我随后尝试创建一个有序链表,并意识到无法重载 '<' 运算符将是一个严重的问题。
我在这个网站上查看了其他人的问题,但它仍然没有让我明白,所以我想我会发布我的代码并得到更适合我正在做的事情的答案。
向前..
链表类:
public class MyList<T> {
/*** ~Public Interface~ ***/
//insert, delete, size, print, etc.
...
/*** Private Data Members ***/
//node begin, end, T data
....
/** Private node class **/
//Represents the nodes in the list
private class node implements Comparable<T>{ //Don't know if this is right
node next;
node prev;
T data;
node(node p, node n, T d){
next = n;
prev = p;
data = d;
}
@Override
public int compareTo(T o) {
return (data <= o ? 1 : 0); //Get an error still here
}
/** Iterator **/
//iterator class
}
有序链表类:
public class OrderedList<T> extends MyList<T> implements Comparable<T>{ //Pretty sure this is wrong
public void insert(T d){
if(empty()){
push_front(d);
} else {
MyList<T>.MyListIter it = begin();
int i = 0;
//This won't work obviously
for(; i < size() || it.current().compareTo(it.next()) == -1; ++i, it.next()){
//find node to place the new node before it
it.prev() //Need to go back one since we went forward in the loopcheck.
}
}
}
在这里真是不知所措。如何实现类似于运算符重载的东西,以便我可以完成这个有序列表实现?
我也在尝试掌握 Java 中的继承,因此,如果您在这方面发现有问题,也请随时加入。
谢谢大家。
更新:
好的,我做了我认为必须做的改变,但我仍然遇到错误。这是新代码:
MyList 类中的节点类:
private static class node<T> implements Comparable<T>{
node<T> next;
node<T> prev;
T data;
node(node<T> p, node<T> n, T d){
next = n;
prev = p;
data = d;
}
public int compareTo(T o) {
return ((Comparable<T>) this.data).compareTo(o);
}
}
有序列表:
公共类 OrderedList> 扩展 MyList{
compareTo 的用法:
if(((Comparable<T>) it).compareTo(it.next()) == -1) found = true;
编译器强迫我做这些转换,现在错误是:
MyList$MyListIter cannot be cast to java.lang.Comparable
列表迭代器类如下所示:
public class MyListIter{
它在 MyList 中。
编辑[已解决]
当我使用我的迭代器时,我没有使用 it.current() 来访问实际数据,而是使用 it.compareTo(..),但是我的迭代器当然不是数据,因此对它一无所知相比于()。