我正在处理一个Linked List项目,我在构造函数方面遇到了很大麻烦。
我已经实现了默认构造函数(创建空列表.AKA data = null,size = 0)但是另一个构造函数让我很困惑!!!!
我想实现一个构造函数,用它创建一个带有valueS / elementS的链表(String [])。我的第一个想法是“蛋糕,我所要做的就是:
这是我的代码:
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++;
}
}
}
我使用这个构造函数测试了我的代码,但它不起作用。 我知道某处有一个愚蠢的错误,但我的逻辑/思想是盲目的。
答案 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");