加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 比较两个通用对象,如果它们是“更大”或“更小”

发布时间:2020-12-15 04:44:53 所属栏目:Java 来源:网络整理
导读:我想在它们的节点中生成一个带键 – 值对的二叉树. 在我的二叉树中,我想在开头使用insert方法实现节点,如果键小于当前节点的键,则实现新的左节点.然后,如果已经有一个左节点,它将再次检查它.右/大节点插入遵循相同的逻辑. 我首先使用int类型编写了我的代码,
我想在它们的节点中生成一个带键 – 值对的二叉树.

在我的二叉树中,我想在开头使用insert方法实现节点,如果键小于当前节点的键,则实现新的左节点.然后,如果已经有一个左节点,它将再次检查它.右/大节点插入遵循相同的逻辑.

我首先使用int类型编写了我的代码,因为在使用泛型之前我更容易测试我的代码(对我来说是新主题).它在使用int时有效但我不确定如何使用“<”来比较两个泛型和它们自己或“>”.

public ListCell<Type> checkKey(Type key,ListCell<Type> checkCell) {
    ListCell<Type> newCell = null;
    if (key < checkCell.key && checkCell.left != null) {
        ...
    }
    ...
}

我不知道它是否值得说,但我正在使用自编码列表创建我的二叉树.
在上面你可以看到我当前的检查,但我现在无法将我的给定密钥与checkCell.key进行比较,因为它们不是数字.

所以我的一般问题是如何比较泛型中的键,如果它们比我在二叉树中的实现“更小”或“更大”.

提前致谢

解决方法

您需要确保您的泛型类型实现了 Comparable接口,然后使用compareTo方法. Java不支持重载>操作符(或任何操作符超载,就此而言).

根据the documents,比较:

Returns a negative integer,zero,or a positive integer as this object is less than,equal to,or greater than the specified object.

一个示例(您必须映射到您的确切代码),假设该键是您将存储在节点中的项目,checkCell.key是您的节点

int compareResult = key.compareTo(checkCell.key);
if (key < 0) { // it goes on the left }
else if (key == 0) { // it is the same }
else { // it goes on the right }

在compareTo方法中,您需要确定类中的哪些字段确定它是“排序”.例如,如果您有大小和优先级字段,则可以执行以下操作:

@Override public int compareTo(Type other) {
  final int BEFORE = -1;
  final int EQUAL = 0;
  final int AFTER = 1;

  if (this == other) return EQUAL;

  if (this.size < other.size) return BEFORE;
  else if (this.size > other.size) return AFTER;
  else { // size is equal,so test priority
    if (this.priority < other.priority) return BEFORE;
    else if (this.priority > other.priority) return AFTER;
  }
  return EQUAL;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读