Java 链表的泛型类型实现和两个泛型对象的交换 实现可比较的泛型类
我的第一个问题是如何正确实现实现compareTo的泛型类。我当前的类定义是: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
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){
//交换
}
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){