我正在尝试创建一个扩展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;
}
关于如何使用迭代器对列表进行排序的任何建议?
答案 0 :(得分:3)
不要考虑使用迭代器对列表进行排序。考虑使用迭代器将新元素插入已排序的列表中。
您的列表将从空开始。添加第一个元素时,您将拥有一个元素的列表,根据定义,该元素已排序。如果您确保始终在正确的位置添加后续元素,那么列表将保持排序!
这正是使用get
的代码所做的事情,但正如您所说的那样,这对于链接列表来说效率不高。您需要做的是使用迭代器重现该算法。
提示:列表迭代器允许您add an element at the current position。