1

我正在尝试为我的分配做一个链表,这明确要求从头开始创建一个链表和一些派生类型,如队列和堆栈,这只是一些大学作业,我意识到如何制作一个节点类和一个链表类,但我正在努力在这个链表类中创建 addAll() 方法,这就是我所拥有的。

如果我必须打赌,我说是 Collection c 之一,但是,我正在尝试在那里添加东西列表,以便将他的内容传递到新列表中,obiusly 还没有准备好并且 obiusly 不起作用。

你能告诉我如何传递某种“原型列表”以便在新列表中传递数据吗?

(我知道我必须使用某种 for(objects) 但我无法通过参数传递一些数据,这将是放在那里的正确参数?)

public boolean addAll(Collection c) {
        for (int i = 0; i < (this.listaNodos.size()); i++) {

            //for (T someT : c){
            //  Node newNodo = new Node(someT);
            //}

            //i know the one down there is not gonna do anything, because
            //i'm not accesing the data, but one problem at a time would ya ;)
            Node newNodo = new Node(someT);
            Node actualNodo = this;
            boolean processFinished = false;

            try{
                if(index >= this.listaNodos.size() || index < 0){
                    throw new IndexOutOfBoundsException();
                }


                do{
                    if(index == actualNodo.getIndex())
                    {
                        actualNodo.setData(someT);
                        processFinished = true;
                        return true;
                    }
                    else
                    {
                        actualNodo = actualNodo.nextNode;
                    }
                }while(!processFinished);
                return false;
            }catch(IndexOutOfBoundsException ex)
            {
                throw ex;
            }
        }
        return false;
    }

你能告诉我如何修复它以使其正常工作吗?

任何澄清、建设性评论或问题的请求也将不胜感激。

提前致谢

4

1 回答 1

1

我假设您已经有了某种add()方法,对吗?如果是这样,您可以遍历每个元素c并使用 add 方法添加它:

public boolean addAll(Collection<T> c) {
    boolean changed = false;
    for (T t:c) {
        changed |= this.add(t);
    } 
    return changed;
}

我假设返回的布尔值表示此列表是否已更改,这是Collection合同中定义的方式:https ://docs.oracle.com/javase/7/docs/api/java/util/Collection.html# addAll(java.util.Collection)

您还缺少 add 方法的泛型类型,所以我添加了一个。我假设你的类定义看起来像这样?

public class MyLinkedList<T>
于 2016-11-20T18:41:25.320 回答