Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 链表的泛型类型实现和两个泛型对象的交换 实现可比较的泛型类_Java_Generics_Interface_Comparable - Fatal编程技术网

Java 链表的泛型类型实现和两个泛型对象的交换 实现可比较的泛型类

Java 链表的泛型类型实现和两个泛型对象的交换 实现可比较的泛型类,java,generics,interface,comparable,Java,Generics,Interface,Comparable,我的第一个问题是如何正确实现实现compareTo的泛型类。我当前的类定义是: public static class Node<T> implements Comparable<Node<T>>{ 公共静态类节点实现可比较{ 我的比较方法是: public <T extends Comparable<T>> int compareTo(Node<T> n){ public int compareTo(节点n){ 1

我的第一个问题是如何正确实现实现compareTo的泛型类。我当前的类定义是:

public static class Node<T> implements Comparable<Node<T>>{
公共静态类节点实现可比较{
我的比较方法是:

public <T extends Comparable<T>> int compareTo(Node<T> n){
public int compareTo(节点n){
1a.这些定义正确吗

1b.我应该如何完成我的compareTo方法?我在网上找到的很多文献都在方法本身中引用了使用.compareTo(),这对我来说毫无意义

交换链接列表中的两个节点: 我当前的方法定义是

public void swap(Node<T> n1, Node<T> n2){
    // swap
}
公共无效交换(节点n1、节点n2){
//交换
}
  • 是否可以在单链表实现中交换两个节点,或者交换方法本身是否需要链表的双链表实现
  • 1a.这些定义正确吗

    不完全正确。您对
    compareTo
    的定义是声明一个类型变量,这可能是错误的:

    public <T extends Comparable<T>> int compareTo(Node<T> n){
    
    public int compareTo(节点n){
    
    (它实际上不应该编译。)

    应该是:

    @Override
    public int compareTo(Node<T> n){
    
    @覆盖
    公共整数比较(节点n){
    
    1b.我应该如何完成比较法

    这取决于您要比较的内容。因为您没有指定,所以我们不知道。;)

    我在网上找到的很多文献都在方法本身中引用了using.compareTo(),这对我来说毫无意义

    下面是一个典型使用方法的示例:

    // saying T must also be Comparable:
    // it's possible you are supposed to do
    // this for your own Node declaration too
    //         vvvvvvvvvvvvvvvvvvvvvvv
    class Node<T extends Comparable<T>> implements Comparable<Node<T>> {
        T data;
    
        @Override
        public int compareTo(Node<T> that) {
            return this.data.compareTo( that.data );
        }
    }
    
    //表示T也必须是可比较的:
    //有可能你应该这么做
    //这也适用于您自己的节点声明
    //VVVVVVVVVVV
    类节点实现了可比较的{
    T数据;
    @凌驾
    public int compareTo(该节点){
    返回this.data.compareTo(that.data);
    }
    }
    
    现在我们可以比较节点,但它实际上委托给任何数据。我们不知道或不关心数据是什么(尽管它不能为null),只是它实现了
    可比较的

    2.是否可以在单链表实现中交换两个节点,或者交换方法本身是否需要链表的双链表实现

    这里的提示是,您不需要交换节点,只需要交换它们的数据即可

    我当前的类定义是:

    public static class Node<T> implements Comparable<Node<T>>{
    
    1b.我应该如何完成我的compareTo方法?我在网上找到的很多文献都在方法本身中引用了使用.compareTo(),这对我来说毫无意义

    您可以根据
    节点
    类的字段以任何有意义的方式实现该方法。如果您不清楚是什么使一个
    节点
    小于另一个,那么该类可能不应该实现
    可比的

    您对使用
    .compareTo()
    的困惑在问题本身就很明显。
    compareTo()
    在特定类的上下文之外作为方法名没有意义。有很多这样的方法,都是不同的。在许多情况下,使用
    compareTo()是明智的
    实现不同类的
    compareTo()
    方法时一个类的方法

  • 是否可以在单链表实现中交换两个节点,或者交换方法本身是否需要链表的双链表实现

  • 可以交换单链表中的节点。您可以只交换有效载荷,但如果必须交换节点对象本身,则需要遍历列表以查找每个节点的前一个节点。根据数据结构的详细信息,当要交换的节点之一是fi时,可能需要特殊处理列表中的RST。

    这里你应该如何使用<代码> CuasReto <代码>?例如,对列表进行排序……还是……?你在比较什么?这里有两个无关的问题。考虑单独的问题。
    public <T extends Comparable<T>> int compareTo(Node<T> n){
    
    public int compareTo(Node<T> n){