具有初始值的Linked List构造函数

时间:2014-12-20 02:07:41

标签: java arrays constructor linked-list nodes

我正在处理一个Linked List项目,我在构造函数方面遇到了很大麻烦。

我已经实现了默认构造函数(创建空列表.AKA data = null,size = 0)但是另一个构造函数让我很困惑!!!!

我想实现一个构造函数,用它创建一个带有valueS / elementS的链表(String [])。我的第一个想法是“蛋糕,我所要做的就是:

  • 使用默认构造函数创建空链表
  • 在for循环中使用for-each循环。 for-each循环是迭代字符串数组并将它们添加到我的空链表中。 需要for循环来跟踪索引。“

这是我的代码:

public LinkedList(String[] data)
{
    LinkedList l = new LinkedList();

    for (int i = 0; i <= data.length; i++)
    {

        for (String d : data)
        {
            l.add(d, i);
            i++;
        }

    }
}

我使用这个构造函数测试了我的代码,但它不起作用。 我知道某处有一个愚蠢的错误,但我的逻辑/思想是盲目的。

4 个答案:

答案 0 :(得分:1)

您需要更改add方法的参数,它希望索引是第一个参数。请参阅http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#add(int,%20E)

    for (String d : data)
    {
        l.add(i, d);
        i++;
    }

答案 1 :(得分:1)

嗯,你并没有真正提及&#34;这个&#34;你已经写过的构造函数了。您创建一个链接列表l并修改该链接列表,但您实际上从未真正开始工作&#34;这个&#34;。我也赞同其他人,第二个for循环是不必要的。

这也允许您使用this(),这是一个很酷的功能来了解。帮助您保持代码干燥和无错误。

public LinkedList(String[] data){
    this(); //Call the default constructor to set up default properties
    for (String d : data){
        add(d); //Call on this
    }
}

答案 2 :(得分:0)

另一种方法是在循环中添加l.add(d)。这样就可以保证在列表末尾插入新元素。

当我想在特定位置专门插入时,我会使用l.add(i, d)

答案 3 :(得分:0)

您的课程是否延长LinkedList?如果是这样,我会这样做:

public class MyLinkedList extends LinkedList<String> {

    ...

    public MyLinkedList(String... array) {
        super();
        if (array != null && array.length > 0) {
            for (String s : array) {
                add(s);
            }
        }
    }

    ...

}

扩展LinkedList并不是一个好主意。如果您想要一种简单的方法来创建带有元素的新LinkedList,请使用以下方法:

public static <E> LinkedList<E> newLinkedList(
        @SuppressWarnings("unchecked") final E... elements) {
    final LinkedList<E> list = new LinkedList<E>();
    Collections.addAll(list, elements);
    return list;
}

....

LinkedList<String> yourList = newLinkedList("foo", "bar", "baz");