对于一项任务,我们被要求在 Java 中将 LinkedLists 的有序和无序版本实现为 Bags。有序版本将简单地扩展无序实现,同时覆盖插入方法。
插入功能的排序工作......有点。给定一个测试数组
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() 方法,该方法应该给出正确的顺序。
碰巧,我的一个同学有类似的实现,并返回相同的结果。
使用自然排序,我该如何解决这个问题?