树数据结构(泛型)

时间:2015-12-07 15:11:21

标签: java generics tree

我正在实现一个简单的Tree数据结构。 我的目标是在Tree类中创建一个Node类型的对象。 在这种情况下,我不明白如何管理泛型。

这是我的瘦树结构:

public class RBT<K extends Comparable<K>, V> {

    Node<K,V> a = null;
    Node<Integer,String> b = null;

    public RBT() {
        this.a = new Node<K,V>(new Integer(1), new String("node1")); // ERROR
        this.b = new Node<Integer, String>(new Integer(1), new String("node1"));

        this.a = this.b; // ERROR!
    }

    public void newNode(K key, K value) {
        Node<K,V> test = new Node<K,V>(key, value); // ERROR
    }

    public static void main(String[] args) {
        RBT<Integer,String> rbt = new RBT<Integer,String>();
        rbt.newNode(new Integer(2), new String("node2")); // ERROR!
    }
}

这是我的节点表示:

public class Node<K,V> {
    private Node<K,V> father;
    private Node<K,V> left;
    private Node<K,V> right;

    private K key;
    private V value;

    Node(K key, V value) {
        this.father = this.left = this.right = null;

        this.key = key;
        this.value = value;
    }
}

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

首先,

this.a = new Node<K,V>(new Integer(1), new String("node1")); // ERROR

在为其提供确切类型时,无法将K,V添加为泛型。 所以删除它

 this.a = new Node(new Integer(1), new String("node1"));

其次,

this.a = this.b; // ERROR!

this.a具有通用<K,V>,而this.b具有<Integer,String>。因此,您可以通过投放来解决不匹配问题,因为您确切知道K,V将是Integer,String

this.a = (Node<K, V>) this.b;

此处您的方法签名错误

public void newNode(K key, K value) {
                           ^ should be V
        Node<K,V> test = new Node(key, value); // ERROR
    }

答案 1 :(得分:0)

我是一个使用Generic of Java的菜鸟。你可以这样做。

public class RBT<K extends Comparable<K>, V> {

    Node<K,V> a = null;
    Node<Integer,String> b = null;

    public RBT() {
        this.a = new Node(new Integer(1), new String("node1")); // ERROR
        this.b = new Node<Integer, String>(new Integer(1), new String("node1"));

        this.a = (Node<K, V>) this.b; // ERROR!
    }

    public void newNode(K key, V value) {
        Node<K,V> test = new Node(key, value); // ERROR
    }

    public static void main(String[] args) {
        RBT<Integer,String> rbt = new RBT<Integer,String>();
        rbt.newNode(new Integer(2), new String("node2")); // ERROR!
    }
}

原谅我可怜的英语。我不是母语。

答案 2 :(得分:-1)

正如您已经发现的那样,你不能写

new Node<K, V>

您必须指定类型。

Node<Integer, String> node = new Node<Integer, String>(new Integer(1), new String("anything"))