【问题标题】:BinarySearchTree remove method malfunctioning when removing integers删除整数时 BinarySearchTree 删除方法出现故障
【发布时间】:2015-04-04 22:27:32
【问题描述】:

我从头开始编写 BinaryTree 结构,其中包括一个 remove(Object obj) 方法,用于从所述树中删除元素。它似乎对除整数以外的所有类型都正常工作,我不知道为什么。

public BinaryTree<E> remove(Object obj) {
        try{
            E value = (E)obj;
            int cmp = value.compareTo(this.value); 
            if(cmp == 0) {
                List<BinaryTree<E>> kids = children();
                if(kids.size() == 0) {
                    return new EmptyBinarySearchTree<E>();
                }
                if(kids.size() == 1) {
                    return kids.get(0);
                }
                //2 children
                BinaryTree<E> successor = ((BinarySearchTree)right).smallest();
                BinaryTree<E> result = remove(successor.getValue());
                result.setValue(successor.getValue());
                return result;
            }
            if(cmp < 0) {
                left = left.remove(value);
            }
            if(cmp > 0) {
                right = right.remove(value);
            }
        }
        catch(ClassCastException cce) {

        }
        return this;
    }

我正在使用以下驱动 BinaryTree,它还实现了我构建的 Set:

package setDriver;
import set.*;
import list.*;

public class HwTreeSetDriver
{
    public static void main()
    {
        Set <Integer> values;
        values = new TreeSet <Integer> ();


    values.add (3);
    values.add (5);
    values.add (3);



    for (int j=0; j<5; j++)
         values.add (j * 10);


    Iterator<Integer> itty = values.iterator();
    while (itty.hasNext())
        if (itty.next() % 2 == 1)
            itty.remove();              // remove odd numbers


}

}

运行驱动后,大小还是6,集合包含3、5、10、20、30、40。

下面是TreeSet中的remove(Object obj)方法,它又调用了我最初贴的remove方法:

public boolean remove(Object obj){
    if(!contains(obj)) return false;

    tree = tree.remove(obj);
    size--;
    return true;
}

【问题讨论】:

  • 嗯,它有什么作用?没有工作代码或错误消息/堆栈跟踪,就没有什么可做的了。
  • remove 是否过载?有remove(int) 版本吗?
  • 在测试时向我们展示您用来驱动它的代码。
  • 我没有看到两段代码之间的联系。
  • 这类问题应该通过调试更深入地阐明。你能确定“所有其他对象”和整数在执行中的不同之处吗?

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


【解决方案1】:

Is int an object in Java?

int 不被视为对象 这里有一个关于stackoverflow的问题以供证明

【讨论】:

  • 这有关系吗? OP 说“除了 Integer 之外的所有类型似乎都能正常工作”,这是一种引用类型,与 int 不同。
  • 但是函数需要一个对象,,,,,
  • 哦,去看看自动装箱
猜你喜欢
  • 2018-10-07
  • 2011-01-07
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2012-08-20
相关资源
最近更新 更多