Java 使用泛型和集合实现compareTo()
我在做收藏工作,我想不出这个。。。我想基于Node类中的“data”变量重写compareTO()方法。。这样我就可以调用collection.sort()对arraylist进行排序Java 使用泛型和集合实现compareTo(),java,sorting,collections,comparable,generic-collections,Java,Sorting,Collections,Comparable,Generic Collections,我在做收藏工作,我想不出这个。。。我想基于Node类中的“data”变量重写compareTO()方法。。这样我就可以调用collection.sort()对arraylist进行排序 public class Node<E> implements Comparable<E>{ public E data; public Node<E> next; public Node(){ data=null;
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类节点实现可比较{
公共电子数据;
公共节点下一步;
公共节点(){
数据=空;
next=null;
}
公共节点(E数据1){
数据=数据1;
}
公共E getData(){
返回数据;
}
公共节点getNext(){
下一步返回;
}
@凌驾
公共内部比较(E/o){
//TODO自动生成的方法存根
返回0;
}
}
及
公共类测试{
公共静态void main(字符串参数[]){
ArrayList arr=新的ArrayList();
节点n1=新节点(1);
节点n2=新节点(3);
节点n3=新节点(4);
节点n4=新节点(3);
节点n5=新节点(6);
节点n6=新节点(2);
arr.add(n1);
arr.add(n2);
arr.add(n3);
arr.add(n4);
arr.add(n5);
arr.add(n6);
集合。排序(arr);
}
}
基本上,您收藏的E
元素也必须具有可比性,可以通过以下方式强制执行:
public class Node<E extends Comparable<E> implements Comparable<Node<E>> {
如果您的
节点
类接受null
数据元素,则必须更仔细地实现compareTo()
。您的声明在我看来很奇怪。例如,将节点
与整数
进行比较会很奇怪-通过比较其中的整数,将节点
与另一个节点
进行比较会更有意义
然后需要约束E
,以便比较两个数据值
所以我想:
public class Node<E extends Comparable<E>> implements Comparable<Node<E>> {
...
public int compareTo(Node<E> node) {
return data.compareTo(node.data);
}
}
public类节点实现可比较{
...
公共整数比较(节点){
返回data.compareTo(node.data);
}
}
您可以以牺牲复杂性为代价使其更加灵活,如下所示:
public class Node<E extends Comparable<? super E>> implements Comparable<Node<E>>
public class Node您所做的基本上是将节点的比较委托给运行时类型E
的比较,因此E
本身也应该实现Comparable
。所以我想你的意思是:
class Node<E extends Comparable<E>> implements Comparable<Node<E>> {
private E data;
@Override
public int compareTo(Node<E> arg0) {
return arg0.data.compareTo(data);
}
}
类节点实现可比较的{
私人电子数据;
@凌驾
公共整数比较(节点arg0){
返回arg0.data.compareTo(数据);
}
}
还请注意,您应该将Node
对象与Node
对象进行比较,而不是将Node
对象与E
对象进行比较
旁注:你的班级成员应该是私人的。你甚至有能手,那为什么他们是公开的呢
public class Node<E extends Comparable<? super E>> implements Comparable<Node<E>>
class Node<E extends Comparable<E>> implements Comparable<Node<E>> {
private E data;
@Override
public int compareTo(Node<E> arg0) {
return arg0.data.compareTo(data);
}
}