对于作业,我们被要求将LinkedLists的有序和无序版本实现为Java中的包。有序版本将简单地扩展无序的实现,同时覆盖插入方法。
插入功能的排序有点......给出一个
的测试数组String[] testArray= {"z","g","x","v","y","t","s","r","w","q"};
输出
q w r s t y v x g z
什么时候应该
g q r s t v w x y z
但是,当元素没有混淆时,排序正常。例如,我最初使用上面的testArray[]
,alphabe反转,排序完全正确。
我的添加功能是
@Override
public void add(E e){
Iter iter= new Iter(head.prev);
int compValue;
E currentItem= null;
//empty list, add at first position
if (size < 1)
iter.add(e);
else {
while (iter.hasNext()){
currentItem= iter.next(); //gets next item
//saves on multiple compareTo calls
compValue= e.compareTo(currentItem);
//adds at given location
if (compValue <= 0)
iter.add(e, iter.index);
else //moves on
currentItem= iter.next();
}
}
}
迭代器功能实现为
//decided to use iterator to simplify method functionality
protected class Iter implements Iterator<E>, ListIterator<E>{
protected int index= 0;
protected Node current= null;
//Sets a new iterator to the index point provided
public Iter(int index){
current= head.next;
this.index=0;
while (index > nextIndex()) //moves on to the index point
next();
}
public void add(E e, int index){
size++;
Iter iterator= new Iter(index);
Node node= new Node();
Node current= iterator.current.prev;
node.next= current.next;
node.prev= current;
node.next.prev= node;
node.prev.next= node;
node.item= e;
}
就像现在一样,唯一使用的东西是原始类型。我知道对于对象,必须编写一个特定的可比类,但在这种情况下,String包含一个compareTo()方法,该方法应该给出正确的顺序。
偶然的机会,我的同学有类似的实施,并返回相同的结果。
使用自然排序,我该如何解决这个问题?
答案 0 :(得分:1)
关于你的add()函数的三件事突然出现在我身上: