我正在处理集合,但我无法弄清楚...我想基于 Node 类中的“数据”变量重写 compareTO() 方法。这样我就可以调用 collection.sort() 来排序数组列表..
public class Node<E> implements Comparable<E>{
public E data;
public Node<E> next;
public Node(){
data=null;
next=null;
}
public Node(E data1){
data=data1;
}
public E getData(){
return data;
}
public Node<E> getNext(){
return next;
}
@Override
public int compareTo(E o) {
// TODO Auto-generated method stub
return 0;
}
}
和
public class Test {
public static void main(String args[]){
ArrayList<Node> arr= new ArrayList<Node>();
Node n1=new Node(1);
Node n2=new Node(3);
Node n3=new Node(4);
Node n4=new Node(3);
Node n5=new Node(6);
Node n6=new Node(2);
arr.add(n1);
arr.add(n2);
arr.add(n3);
arr.add(n4);
arr.add(n5);
arr.add(n6);
Collections.sort(arr);
}
}
最佳答案
我觉得你的声明很奇怪。比较 Node<Integer>
会很奇怪用Integer
例如 - 比较 Node<Integer>
会更有意义与另一个Node<Integer>
通过比较它们中的整数。
然后您需要约束 E
这样您就可以比较两个数据值。
所以我怀疑想要:
public class Node<E extends Comparable<E>> implements Comparable<Node<E>> {
...
public int compareTo(Node<E> node) {
return data.compareTo(node.data);
}
}
您可以以复杂性为代价使它稍微灵活一些,如下所示:
public class Node<E extends Comparable<? super E>> implements Comparable<Node<E>>
(代码的主体将保持不变...)
关于java - 用泛型和集合实现 compareTo(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234219/