我需要比较insert方法中的两个对象。但我无法弄清楚在哪里以及如何实现可比或比较器。我的代码如下所示:
这是我为二叉树创建的节点。
Node.java
public class Node {
private Object data;
private Node left, right;
//initial case when a Node of a binary tree gets created. both left and right subtrees point to null
public Node (){
left = right = null;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
}
MyBinaryTree.java
public class MyBinaryTree implements Comparable<Node> {
Node root;
public MyBinaryTree(){
root = null;
}
void insert(Object x){
Node newrec = new Node(); //Node constructor gets called and sets up a root node with empty
//subtrees
newrec.setData(x);
if(root == null){
root = newrec;
}
else{
Node a,b;
a = b = root;
while(a!=null){
b=a;
if( ( newrec.getData() ).compareTo( a.getData() ) ) {
}
}
}
}
void inorder(Node root){
}
@Override
public int compareTo(Node o) {
// TODO Auto-generated method stub
int i = (o.)
return 0;
}
}
您不仅需要能够比较节点,还需要能够比较这些节点中包含的数据。这意味着您的节点
需要限制为接受可比的对象,
或者您的树需要接受一个比较器
来比较它们。
如果您真的想同时支持这两种方法,那么在进行比较时,如果提供了比较器
,则使用其compare方法,否则将数据强制转换为carable
,其中E是节点数据的类型(见下文),然后使用它的compareto
方法。
这就引出了下一点。您的节点
类可能不应该简单地包含对象
作为其数据,而是声明为节点
,然后您的树可以声明为MyBinaryTree
我还将更改节点
的构造函数,以将数据作为参数,而不是在创建setter后立即调用setter。您没有理由要创建一个没有数据的节点
。
我强烈建议通过源代码查看JDK附带的java.util
包中的一些泛型集合。特别是,我参考了treemap.java
的源代码,以了解它们是如何处理可比较元素和不可比较元素的,因为该类的声明方式并不要求元素具有可比性。(如果不是,并且没有比较器,
尝试将对象强制转换为可比
时,将出现ClassCastException
。)看看他们是如何实现类似代码的,将对您有很大帮助。您可能还想回顾一下Java泛型。
我试着选一个段落,通过打印出前三个单词来找到它的“意义”。去掉所有语法单词和空白后,我使用Hashmap计算每个单词的出现次数。然后,由于我不知道更好的方法,我只是创建了自己的小自定义对象来存储单词、键和出现次数、值,就像Hashmap一样,但我的老师建议实现Comparable,但我遇到了一个问题。我有两个问题,一个在我“修复”另一个时出现。问题在于Pair类中的compareTo函数和另一个类
问题内容: 我有两个从同一类实例化的java对象。 如果我将它们的两个属性都设置为完全相同的值,然后验证它们是否相同 但是,这些方法都不返回真实值。我已经检查了每个属性,并且它们匹配。 如何比较这两个对象以验证它们是否相同? 问题答案: 你需要提供自己的实现。 如果哈希表中有可能使用你的对象,则还应该重写。一个合理的实施将是该对象的字段的哈希码喜欢的东西结合起来:
我有以下代码: 现在,我有两个房屋列表和,这两个列表都填充了相同的房屋元素,但是嵌套的列表房屋任务在newHouse中更新了一个额外的任务。 如何获得一个新的列表,该列表包含通过Java8流添加的任务? 这一直在破坏我的大脑,我似乎无法让它工作。
我试图解决以下leetcode问题: 给定一个排序数组,两个整数k和x,查找数组中与x最近的k个元素。结果也应该按升序排序。如果有一个领带,较小的元素总是首选。 示例1:输入:[1,2,3,4,5],k=4,x=3 产出:[1,2,3,4] 示例2:输入:[1,2,3,4,5],k=4,x=-1 产出:[1,2,3,4] 目前我的错误解决方案如下: 问题在于我传递给构造函数的比较器。其思想是,我希
这是我的JSON文件。我只是不知道如何将对象PAV-001中的这个随机字符串()与node.js中的PAV-002中的所有这类字符串进行比较。只是想知道他们是否平等。谢谢!
问题内容: 看一下PHP文档,对象的以下两种方法似乎都可以解决我的问题: DateTime :: diff]:获取差异并使用该差异确定哪个更古老。 DateTime :: getTimestamp:获取UNIX时间戳并进行比较。 这两种方法在doco中都标记为在版本>=5.3中可用(并且毫不奇怪,如果我尝试调用它们,我会发现它们不存在)。我找不到5.2.8的任何特定文档,所以不确定我的版本中是否有