创建已排序的链接列表类

时间:2012-10-13 15:18:56

标签: java linked-list

我正在尝试创建一个扩展LinkedList的SortedLinkedList类。该类应该将项添加到SortedLinkedList并对它们进行排序。

我正在尝试覆盖布尔加法(E obj)方法,以便按排序顺序添加项目。

在Stackoverflow问题上,我找到了以下覆盖add(E obj)的方法:

public boolean add(E obj) {
    int index = 0;
    for( ; index<size() ; index++){
        E object= get(index);

        if(obj.compareTo(object) < 0){
            break;
        }
    }

    add(index, obj);
    return true;
};

我理解这个方法是如何工作的,但是我已经读过使用ListIterator比使用get(index)更有效。我一直在尝试使用ListIterator,但我似乎无法使一切正常工作。

这是我使用Listiterator所取得的成就,我确信它有问题,但我似乎无法弄明白:

public boolean add(E obj)
{   
    add(size(), obj);
    ListIterator<E> iterator = listIterator();

    while(iterator.hasNext())
    {
        E object = iterator.next();
        if(obj.compareTo(object)<0)
        {
            //do something;
        }
    }
    return true;
}

关于如何使用迭代器对列表进行排序的任何建议?

1 个答案:

答案 0 :(得分:3)

不要考虑使用迭代器对列表进行排序。考虑使用迭代器将新元素插入已排序的列表中。

您的列表将从空开始。添加第一个元素时,您将拥有一个元素的列表,根据定义,该元素已排序。如果您确保始终在正确的位置添加后续元素,那么列表将保持排序!

这正是使用get的代码所做的事情,但正如您所说的那样,这对于链接列表来说效率不高。您需要做的是使用迭代器重现该算法。

提示:列表迭代器允许您add an element at the current position