等于整数

时间:2014-03-28 18:30:42

标签: java tree binary-tree binary-search-tree

我正在创建二叉树。我不能等于整数,但在我的课程中它是有效的。这是代码的一部分:

In tree...

public void add(BTree<T> tree, T newValue){

    if(newValue.equals(getValue())){
        System.out.println("equals, incrementing count...");
        tree.count.incrementAndGet();
    }else if(newValue.compareTo(tree.getValue()) > 0){
        addRight(tree, newValue);
                    //It will back here with another node
    }else{
        addLeft(tree, newValue);
                    //It will back here with another node
    }
}

In main...

BTree<Integer> tree = new BTree<>(0);
    tree.add(tree, 1);
    tree.add(tree, 1);
    tree.add(tree, 1);
    tree.add(tree, -1);

    System.out.println(tree.getLeftChild().getValue() + "(" + tree.getLeftChild().getCount() + ")"  + "     " + tree.getRightChild().getValue() + "(" + tree.getRightChild().getCount() + ")");

In console...

-1(1)     1(1)

我怎样才能等于两个VALUES?

1 个答案:

答案 0 :(得分:2)

equals的定义似乎与compareTo不一致。这不是一件好事。

虽然您可以使用compareTo专门解决此问题,例如:

int cmpResult = newValue.compareTo(tree.getValue();
if (cmpResult == 0){
    System.out.println("equals, incrementing count...");
    tree.count.incrementAndGet();
}else if(cmpResult > 0){
    addRight(tree, newValue);
}else{
    addLeft(tree, newValue);
}

Java documentation for the Comparable interface强烈建议您解决问题:

  

强烈建议(尽管不要求)自然排序与equals一致。这是因为没有显式比较器的有序集(和有序映射)在与自然排序与equals不一致的元素(或键)一起使用时表现得“奇怪”。特别是,这样的有序集(或有序映射)违反了集合(或映射)的一般契约,它是根据equals方法定义的。