java - 用泛型和集合实现 compareTo()

标签 java sorting collections comparable generic-collections

我正在处理集合,但我无法弄清楚...我想基于 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/

相关文章:

java - 在没有默认 POJO 构造函数的情况下将 POJO 转换为 XML

java - 尝试关闭控制台中的警告但失败

c# - Java 的 AbstractMap 在 C# 中的等价物是什么?

c# - 我需要一个可以引用超过 7000 万个 texture2d/vector2 对象集的容器

java - 如何使用 jGit 授权用户

c++ - 如何将结构数组中的成员数据传递给函数?

python - 按数字和字母顺序对两个元素元组的列表进行排序

java - 使用 JPA 处理集合更新

c# - linq 扩展方法 ElementAt 的性能

javascript - 根据出现频率对数据数组进行排序