如何将字符串转换为泛型类型?

时间:2014-08-03 17:35:48

标签: java binary-search-tree

我正在尝试创建一个二叉搜索树,而我在创建实现add方法的main方法时遇到了困难。

以下是目前的主要方法:

public static <T> void main(String [] args) throws IOException
{
    File inFile;
    inFile = new File("inwords.txt");
    BinaryTreeNode<T> node;
    String next;
    T tNext;

    Scanner s = new Scanner(inFile);
    LinkedBinarySearchTree<T> lbst = new LinkedBinarySearchTree<T>();

    while(s.hasNext())
    {
        next = s.next();
        node = new BinaryTreeNode(next);
        lbst.addElement(next, node);
    }

    Iterator it = myTree.iteratorInOrder();
    while(it.hasNext())
    {
        System.out.println(it.next());
    }

}

编译器说add方法需要一个类型T而不是一个字符串,但我认为泛型的全部意义在于可以发送任何数据类型

以下是添加方法:(这些是预先写好的)

public void addElement(T element) 
{
    if (!(element instanceof Comparable))
        throw new NonComparableElementException("LinkedBinarySearchTree");

    Comparable<T> comparableElement = (Comparable<T>)element;

    if (isEmpty())
        root = new BinaryTreeNode<T>(element);
    else 
    {
        if (comparableElement.compareTo(root.getElement()) < 0)
        {
            if (root.getLeft() == null) 
                this.getRootNode().setLeft(new BinaryTreeNode<T>(element));
            else
                addElement(element, root.getLeft());
        }
        else
        {
            if (root.getRight() == null) 
                this.getRootNode().setRight(new BinaryTreeNode<T>(element));
            else
                addElement(element, root.getRight());
        }
    }
    modCount++;
}


private void addElement(T element, BinaryTreeNode<T> node) 
{
    Comparable<T> comparableElement = (Comparable<T>)element;

    if (comparableElement.compareTo(node.getElement()) < 0)
    {
        if (node.getLeft() == null) 
            node.setLeft(new BinaryTreeNode<T>(element));
        else
            addElement(element, node.getLeft());
    }
    else
    {
        if (node.getRight() == null) 
            node.setRight(new BinaryTreeNode<T>(element));
        else
            addElement(element, node.getRight());
    }
}

我不确定为什么有两种添加方法,区别是什么。 任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

您有三种方法:

main() - 获取用户的输入和

addElement()将用户输入插入树中。

addElement()有两个版本,一个从根节点(第一个版本)开始插入,另一个从特定节点开始。

这确实有点令人困惑,因为第一个版本可以用更简单的版本替换:

public void addElement(T element) {
    if (!(element instanceof Comparable))
        throw new NonComparableElementException("LinkedBinarySearchTree");

    Comparable<T> comparableElement = (Comparable<T>)element;

    if (isEmpty()) {
        root = new BinaryTreeNode<T>(element);
        modCount++;
    }
    else { 
        addElement(element, root);
    }  
}