Java Generics:嵌套数据结构

时间:2015-12-12 23:41:59

标签: java generics data-structures nested

我正在实现基于简单双向列表的Java Generics嵌套数据结构。

MyList包含包含Info的节点。

public class MyList<E> {
    public Node<E> head;
    public Node<E> tail;

    public MyList() {
        this.head = this.tail = null;
    }

    public add(E Info) {
        this.head = new Node<E>(info); // i'm considering just one element
    }
}

public class Node<E> {
    private Node<E> succ;
    private Node<E> pred;
    private E info;

    public Node(E info) {
        this.succ = this.pred = null;
        this.info = info
    }
}

public class Info<K,V> {
    public K key;
    public V value;

    public Info(K key, V value) {
        this.key = key;
        this.value = value;
    }
}

现在我想实现以下目标。

  1. 创建一个MyList对象数组。
  2. 每个列表的每个节点都应包含一个Info对象; 3.Info对象应包含一对Key(整数)/ Value(MyList对象);
  3. 列表的每个节点都应包含Info对象;
  4. 每个Info对象应包含一对Key(整数)/ Value(String);
  5. 第一个问题:我知道Java不允许创建通用数组;是否有解决方法来创建它?

    好的,让我们尝试使用“扁平”物体。

    MyList<Info> myList = new MyList<Info>();
    

    现在我创建一个新的Info对象,add方法将放置在Node中。

    myList.add(new Info<Integer,MyList<E>>(new Integer(10), new MyList<Info>()));
    

    但是试图走得更远...

    myList.head.value.insert(new Info<Integer,myList<Info>>(new Integer(10), new myList<Info>()));
    

    ...抛出以下错误:

    cannot find symbol,
    symbol: method insert(Info<Integer,MyList<Info>>)
    location: class Object
    

    第二个问题:类Object怎么样?我应该有一个List对象!

    第三个问题:这是管理泛型的正确方法吗?

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

  1. 您无法实例化通用数组,但始终可以使用ArrayList。您可以安全地获得相同的功能,而且开销可以忽略不计。

  2. 创建列表时,未指定Info

    的类型参数
    MyList<Info> myList = new MyList<Info>();
    

    相反,它应该是

    MyList<Info> myList = new MyList<Info<Integer, MyList<Info<Integer, String>>>>();
    

    由于您没有指定类型参数,因此Java编译器将它们默认为Object类(导致上述错误)。

  3. 错误是由于不正确地处理泛型而造成的。上述修复应解决错误。通常,避免使用原始类型(始终提供适当的类型参数)。

  4. 希望这会有所帮助。
    祝你好运。