java comparable用法_java-如何在类中使用Comparable作为泛型参数

我在数据结构课程中有家庭作业,问题是:

实现双链表类.

方法:

>显示()

> length()或size()

> insertSorted(可比较)

> insertToEnd(可比)

> insertToHead(可比较)

>删除(可比)

>布尔搜索(可比)

您必须在JAVA中执行此操作

创建一个应用程序层来测试您的类及其方法.

将所有源文件压缩为一个文件,并将其重命名为CS214HW1_first_lastName.zip将您的名字放在文件名中.如果需要,添加ReadMe.txt文件以获取更多信息,例如编译.

我正确地实现了所有操作,并且代码运行正常,但是我使用了例如:insertSorted(int)而不是insertSorted(Comparable),因为我不知道该怎么做.

我在网上搜索,并阅读了JAVA文档中的(可比较),但还不够:(

有人可以帮忙吗,这很重要吗?

这是我的一些代码,我无法全部编写,因为我不希望我的朋友得到相同的代码.

如果有相同的代码,我将取零.

码:

class DLL {

class Node {

Node next;

Node prev;

int data;

Node() {

next = null;

prev = null;

data = 0;

}

Node(int dt) {

next = null;

prev = null;

data = dt;

}

}

Node head;

void insertToHead(int dt) {

if (head == null) {

head = new Node(dt);

}

else {

head.prev = new Node(dt);

head.prev.next = head;

head = head.prev;

}

}

public static void main(String args[]) {

DLL dll = new DLL();

dll.insertToHead(1);

dll.insertToHead(2);

dll.insertToHead(3);

}

}

有人,请告诉我在课程开始时要进行哪些更改.

>使用扩展还是实现Comparable< E>要不然是啥!

>并且我应该对方法insertToHead(Comparable)进行哪些更改

>我应该对主机进行哪些更改.

解决方法:

您可能想研究一下generics的工作原理.基本思想是,您希望设置类,以便它不会确切地知道对象的特定类型,但可以给您一些提示,以表明它可以期望已声明的泛型类型的事物的类型.

对于您的情况,您希望设置列表,以便可以创建可以比较的任何内容的链接列表. Java有一个您提到的类Comparable< E>.这告诉Java,它将能够在提供的对象上调用诸如compareTo之类的方法.

更具体地说,您的最后一个问题是:

>使用以下样式的类声明MyClass< MyGenericType扩展Comparable< MyGenericType>>.在您的情况下,DLL< E>扩展了Comparable< E>.

>切换方法参数以接受E我们声明的泛型类型.

>您应该使用Integer类而不是原始类型int,并将列表的创建更改为DLL< Integer>. dll =新的DLL< Integer>().

提供代码的完整更新版本:

public class DLL> {

class Node {

Node next;

Node prev;

E data;

Node() {

next = null;

prev = null;

data = null;

}

Node(E dt) {

next = null;

prev = null;

data = dt;

}

}

Node head;

void insertToHead(E dt) {

if (head == null) {

head = new Node(dt);

}

else {

head.prev = new Node(dt);

head.prev.next = head;

head = head.prev;

}

}

public static void main(String args[]) {

DLL dll = new DLL();

dll.insertToHead(1);

dll.insertToHead(2);

dll.insertToHead(3);

}

}

这个新的实现应该为如何进行其他一些家庭作业提供提示.例如,您现在可以仅按对象compareTo method比较对象,这可能对排序提示提示有用.

该文档页面对如何使用此方法提供了很好的解释.您应该注意,在他们的文档中,他们使用称为T而不是E的泛型类型,只要您的程序唯一,就可以随意调用它.

编辑:

排序方向上的每个提示:

扩展Comparable类的对象具有一个称为compareTo的方法,因此可以调用此方法:

object1.compareTo(object2);

此方法返回一个int,它将是:

>>当object1大于object2时为0

当object1等于object2时> = 0

>

我不想付出太多,因为这是一项家庭作业,但这是我的提示:

上面的代码设置类的方式,您可以通过调用以下命令来告知NodeA和NodeB之间的关系:

NodeA.data.compareTo(NodeB.data)

这将返回一个整数,该整数将根据上面的列表提供您的信息.

< =,> =,==运算符很可能在Integer类的compareTo方法中找到.

就像是:

public int compareTo(Object o) {

int otherNumber = ((Integer) o).intValue();

int thisNumber = this.intValue();

if (otherNumber > thisNumber) {

return 1;

} else if (otherNumber < thisNumber) {

return -1;

} else {

return 0;

}

}

但更有可能他们只是做类似的事情:

public int compareTo(Object o) {

return this.intValue() - o.intValue(); // possibly normalized to 1, -1, 0

}

标签:comparable,generics,java

来源: https://codeday.me/bug/20191121/2055781.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值